From github: claude/card-198-superseded-cards-p3jqzg (git@github.com:teahubxyz/time.git), brought in by sync.py. Time's council reviews it like any PR.
Commits:
housekeeping: list open cards whose work a closed card already did
The daily sweep now compares every open card with the cards closed in the
last 30 days and lists the ones another card looks to have finished, with
the number of the card that did the work, under the stale list on the Astra
log. Three signals, in order of how much they say and first-hit wins: the
closed card's title repeats the open one's (the planner's own repeat rule),
the closed card ports or follows the open card itself (Port of #48, Follows #48), or both carry the same card over. It closes nothing and
labels nothing — the report is for Astra and the CEO, so the rule can stay a
checkable hint instead of a verdict, and a card whose work landed under
another number stops being silently ranked and queued again.
The venture loop's own issues are out of both lists: they are not cards, and
two signups for one venture carry the same title by design, which would have
put every repeat signup on the report. A card whose closed_at is older than
the window is dropped too, since Gitea's since filters on the last update.
repeat_of moved from astra.py to router.py, which astra and housekeeping
both already load, so the sweep and the planner share one copy of the rule
rather than drifting apart. refs and superseded sit beside it, pure and
testable.
The card asked for the test in test_time.py with a World holding one
superseded and one live card. The matching rule is there (check 198, two open
cards: #48, whose work #139 did, and #60, which is live), and the report the
sweep writes from it is checked in test_housekeeping.py, where the sweep's
own fake forge lives — test_time.py's World drives the heartbeat and cannot
run the sweep. No workflow change is needed: housekeeping.yml already runs
the whole sweep.
sync.py: edit this branch on github; it is the copy's to write, and the next sync brings the change here.
From github: `claude/card-198-superseded-cards-p3jqzg` (git@github.com:teahubxyz/time.git), brought in by sync.py. Time's council reviews it like any PR.
Commits:
housekeeping: list open cards whose work a closed card already did
The daily sweep now compares every open card with the cards closed in the
last 30 days and lists the ones another card looks to have finished, with
the number of the card that did the work, under the stale list on the Astra
log. Three signals, in order of how much they say and first-hit wins: the
closed card's title repeats the open one's (the planner's own repeat rule),
the closed card ports or follows the open card itself (`Port of #48`,
`Follows #48`), or both carry the same card over. It closes nothing and
labels nothing — the report is for Astra and the CEO, so the rule can stay a
checkable hint instead of a verdict, and a card whose work landed under
another number stops being silently ranked and queued again.
The venture loop's own issues are out of both lists: they are not cards, and
two signups for one venture carry the same title by design, which would have
put every repeat signup on the report. A card whose `closed_at` is older than
the window is dropped too, since Gitea's `since` filters on the last update.
`repeat_of` moved from astra.py to router.py, which astra and housekeeping
both already load, so the sweep and the planner share one copy of the rule
rather than drifting apart. `refs` and `superseded` sit beside it, pure and
testable.
The card asked for the test in test_time.py with a World holding one
superseded and one live card. The matching rule is there (check 198, two open
cards: #48, whose work #139 did, and #60, which is live), and the report the
sweep writes from it is checked in test_housekeeping.py, where the sweep's
own fake forge lives — test_time.py's World drives the heartbeat and cannot
run the sweep. No workflow change is needed: housekeeping.yml already runs
the whole sweep.
Closes #198
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116Joj4QVA1Gg2WrUmbbfRT
---
<sub>sync.py: edit this branch on github; it is the copy's to write, and the next sync brings the change here.</sub>
The daily sweep now compares every open card with the cards closed in the
last 30 days and lists the ones another card looks to have finished, with
the number of the card that did the work, under the stale list on the Astra
log. Three signals, in order of how much they say and first-hit wins: the
closed card's title repeats the open one's (the planner's own repeat rule),
the closed card ports or follows the open card itself (`Port of #48`,
`Follows #48`), or both carry the same card over. It closes nothing and
labels nothing — the report is for Astra and the CEO, so the rule can stay a
checkable hint instead of a verdict, and a card whose work landed under
another number stops being silently ranked and queued again.
The venture loop's own issues are out of both lists: they are not cards, and
two signups for one venture carry the same title by design, which would have
put every repeat signup on the report. A card whose `closed_at` is older than
the window is dropped too, since Gitea's `since` filters on the last update.
`repeat_of` moved from astra.py to router.py, which astra and housekeeping
both already load, so the sweep and the planner share one copy of the rule
rather than drifting apart. `refs` and `superseded` sit beside it, pure and
testable.
The card asked for the test in test_time.py with a World holding one
superseded and one live card. The matching rule is there (check 198, two open
cards: #48, whose work #139 did, and #60, which is live), and the report the
sweep writes from it is checked in test_housekeeping.py, where the sweep's
own fake forge lives — test_time.py's World drives the heartbeat and cannot
run the sweep. No workflow change is needed: housekeeping.yml already runs
the whole sweep.
Closes#198
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116Joj4QVA1Gg2WrUmbbfRT
The diff does what card #198 asks: the sweep lists open cards that a card closed in the last 30 days appears to have done, with the closing card's number, and it closes and labels nothing. CI (ci / test) is green. I did not run the tests myself.
.github/time/housekeeping.py:361-380: the sweep's superseded() uses since but also re-checks closed_at against the window, which handles Gitea filtering on last update. Venture loop issues are excluded from both lists, so repeated signups don't flood the report.
.github/time/housekeeping.py:404-437: the stale and superseded reads are wrapped separately, so one failing never hides the other. The summary line gains a superseded count, and the live-mode comment carries the superseded numbers in its metadata. Dry-run writes nothing.
.github/time/router.py:340-390: repeat_of moved here from astra.py and is shared by the planner and the sweep, which removes the drift risk the card's author was worried about. REF correctly rejects Portfolio #3 and Depends on #7.
.github/time/router.py:378-390: the third signal ("both carry over the same card") is the weakest. Any open card that shares a Port of #N parent with any lately closed card gets flagged. This can add noise, but it is only a hint and the report says so.
.github/time/housekeeping.py:361-380: the superseded list is re-posted on every daily run for up to 30 days after a match. That matches how the stale list already behaves, so I'm not blocking on it, but Astra may find it repetitive.
.github/time/test_housekeeping.py:280-307 and test_time.py 198 block: the card asked for the superseded/live test in test_time.py. The PR puts the sweep's report test in test_housekeeping.py (where the fake forge lives) and the matching-rule unit test in test_time.py. The PR explains why, and the coverage is adequate.
.github/time/astra.py: the repeat_of call site now uses router.repeat_of. Assuming astra already imports router (the PR says it does), this is a clean move.
review by haiku · claude-haiku-5-5 · via Time
**Approve**
The diff does what card #198 asks: the sweep lists open cards that a card closed in the last 30 days appears to have done, with the closing card's number, and it closes and labels nothing. CI (`ci / test`) is green. I did not run the tests myself.
- `.github/time/housekeeping.py:361-380`: the sweep's `superseded()` uses `since` but also re-checks `closed_at` against the window, which handles Gitea filtering on last update. Venture loop issues are excluded from both lists, so repeated signups don't flood the report.
- `.github/time/housekeeping.py:404-437`: the stale and superseded reads are wrapped separately, so one failing never hides the other. The summary line gains a superseded count, and the live-mode comment carries the superseded numbers in its metadata. Dry-run writes nothing.
- `.github/time/router.py:340-390`: `repeat_of` moved here from `astra.py` and is shared by the planner and the sweep, which removes the drift risk the card's author was worried about. `REF` correctly rejects `Portfolio #3` and `Depends on #7`.
- `.github/time/router.py:378-390`: the third signal ("both carry over the same card") is the weakest. Any open card that shares a `Port of #N` parent with any lately closed card gets flagged. This can add noise, but it is only a hint and the report says so.
- `.github/time/housekeeping.py:361-380`: the superseded list is re-posted on every daily run for up to 30 days after a match. That matches how the stale list already behaves, so I'm not blocking on it, but Astra may find it repetitive.
- `.github/time/test_housekeeping.py:280-307` and `test_time.py` 198 block: the card asked for the superseded/live test in `test_time.py`. The PR puts the sweep's report test in `test_housekeeping.py` (where the fake forge lives) and the matching-rule unit test in `test_time.py`. The PR explains why, and the coverage is adequate.
- `.github/time/astra.py`: the `repeat_of` call site now uses `router.repeat_of`. Assuming `astra` already imports `router` (the PR says it does), this is a clean move.
<sub>review by haiku · claude-haiku-5-5 · via Time</sub>
time
merged commit af52c60e4a into main2026-10-21 02:09:46 +00:00
time
deleted branch claude/card-198-superseded-cards-p3jqzg2026-10-21 02:09:47 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
From github:
claude/card-198-superseded-cards-p3jqzg(git@github.com:teahubxyz/time.git), brought in by sync.py. Time's council reviews it like any PR.Commits:
housekeeping: list open cards whose work a closed card already did
The daily sweep now compares every open card with the cards closed in the
last 30 days and lists the ones another card looks to have finished, with
the number of the card that did the work, under the stale list on the Astra
log. Three signals, in order of how much they say and first-hit wins: the
closed card's title repeats the open one's (the planner's own repeat rule),
the closed card ports or follows the open card itself (
Port of #48,Follows #48), or both carry the same card over. It closes nothing andlabels nothing — the report is for Astra and the CEO, so the rule can stay a
checkable hint instead of a verdict, and a card whose work landed under
another number stops being silently ranked and queued again.
The venture loop's own issues are out of both lists: they are not cards, and
two signups for one venture carry the same title by design, which would have
put every repeat signup on the report. A card whose
closed_atis older thanthe window is dropped too, since Gitea's
sincefilters on the last update.repeat_ofmoved from astra.py to router.py, which astra and housekeepingboth already load, so the sweep and the planner share one copy of the rule
rather than drifting apart.
refsandsupersededsit beside it, pure andtestable.
The card asked for the test in test_time.py with a World holding one
superseded and one live card. The matching rule is there (check 198, two open
cards: #48, whose work #139 did, and #60, which is live), and the report the
sweep writes from it is checked in test_housekeeping.py, where the sweep's
own fake forge lives — test_time.py's World drives the heartbeat and cannot
run the sweep. No workflow change is needed: housekeeping.yml already runs
the whole sweep.
Closes #198
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_0116Joj4QVA1Gg2WrUmbbfRT
sync.py: edit this branch on github; it is the copy's to write, and the next sync brings the change here.
Approve
The diff does what card #198 asks: the sweep lists open cards that a card closed in the last 30 days appears to have done, with the closing card's number, and it closes and labels nothing. CI (
ci / test) is green. I did not run the tests myself..github/time/housekeeping.py:361-380: the sweep'ssuperseded()usessincebut also re-checksclosed_atagainst the window, which handles Gitea filtering on last update. Venture loop issues are excluded from both lists, so repeated signups don't flood the report..github/time/housekeeping.py:404-437: the stale and superseded reads are wrapped separately, so one failing never hides the other. The summary line gains a superseded count, and the live-mode comment carries the superseded numbers in its metadata. Dry-run writes nothing..github/time/router.py:340-390:repeat_ofmoved here fromastra.pyand is shared by the planner and the sweep, which removes the drift risk the card's author was worried about.REFcorrectly rejectsPortfolio #3andDepends on #7..github/time/router.py:378-390: the third signal ("both carry over the same card") is the weakest. Any open card that shares aPort of #Nparent with any lately closed card gets flagged. This can add noise, but it is only a hint and the report says so..github/time/housekeeping.py:361-380: the superseded list is re-posted on every daily run for up to 30 days after a match. That matches how the stale list already behaves, so I'm not blocking on it, but Astra may find it repetitive..github/time/test_housekeeping.py:280-307andtest_time.py198 block: the card asked for the superseded/live test intest_time.py. The PR puts the sweep's report test intest_housekeeping.py(where the fake forge lives) and the matching-rule unit test intest_time.py. The PR explains why, and the coverage is adequate..github/time/astra.py: therepeat_ofcall site now usesrouter.repeat_of. Assumingastraalready importsrouter(the PR says it does), this is a clean move.review by haiku · claude-haiku-5-5 · via Time