Repository navigation
Unchanged ClawHub issue is re-reviewed hourly and re-rated each pass: rating and needs-live-repro labels flip with identical target SHA and verdict #1752
Description
Summary
An unchanged ClawHub issue is re-reviewed roughly hourly, and every pass re-rates it. Over 14 hours, the durable review comment on openclaw/clawhub#3921 was rewritten 12 times. Every revision reviewed the same target SHA and reached the same verdict, yet the issue rating and clawsweeper:* labels changed back and forth between passes. That includes re-adding clawsweeper:needs-live-repro after an earlier pass had removed it because of the reporter's live reproduction.
There was no reporter or maintainer activity on the item after 2026-10-06 19:49 UTC (last human comment). Every later change came from ClawSweeper itself.
Evidence
Durable review comment: openclaw/clawhub#3921 (comment)
Data per revision comes from the comment's userContentEdits (GraphQL), and labels come from the issue timeline. All times are UTC.
| Revision published | Reviewed against | First line | Rating label after the pass | Other label changes |
|---|---|---|---|---|
| 10-06 19:42 | a18bc7496a10 |
needs some work | 🐚 platinum hermit | + needs-live-repro, needs-maintainer-review, no-new-fix-pr |
| 10-06 20:56 | a18bc7496a10 |
needs some work | 🦪 silver shellfish | − needs-live-repro |
| 10-06 22:36 | a18bc7496a10 |
needs some work | 🦪 silver shellfish | + not-repro-on-main, − no-new-fix-pr, − needs-maintainer-review |
| 10-06 22:40 | a18bc7496a10 |
needs some work | 🦪 silver shellfish | − not-repro-on-main |
| 10-07 00:00 | a18bc7496a10 |
needs some work | 🦪 silver shellfish | — |
| 10-07 00:06 | a18bc7496a10 |
needs some work | 🦪 silver shellfish | + not-repro-on-main |
| 10-07 01:15 | a18bc7496a10 |
needs some work | 🦞 diamond lobster | − not-repro-on-main, + source-repro |
| 10-07 02:52 | a18bc7496a10 |
needs some work | 🦞 diamond lobster | — |
| 10-07 04:43 | a18bc7496a10 |
needs some work | 🦞 diamond lobster | — |
| 10-07 06:53 | a18bc7496a10 |
needs some work | 🦞 diamond lobster | — |
| 10-07 08:46 | a18bc7496a10 |
needs some work | 🦪 silver shellfish | − source-repro |
| 10-07 09:53 | a18bc7496a10 |
needs some work | 🐚 platinum hermit | + needs-live-repro |
Observations:
- All 12 revisions name the same reviewed commit (
a18bc7496a10), the same model line (model internal, reasoning medium) and the same verdict. In each one, the "Do we have a high-confidence way to reproduce the issue?" answer starts with "Yes". - Despite that, the rating moved platinum → silver → diamond → silver → platinum,
not-repro-on-mainwas added, removed and added again within 90 minutes, andneeds-live-reproreturned at 09:53. The live reproduction that led to its removal at 20:56 is still in the issue: Officialsteipete/peekabooskill teaches Peekaboo 3 commands removed in 4.0 and shadows the newer bundled skill when installed clawhub#3921 (comment) - Two pairs of passes ran only minutes apart (22:36/22:40 and 00:00/00:06).
- For subscribers, each pass also produces a GitHub notification email, apparently from the temporary status comment posted shortly before publication. Email timestamps from the issue author's inbox are 23:58, 00:04, 01:13 and 02:50 UTC, each about 2 minutes before the matching revision. Reading the issue afterwards shows no new comment, only the edited durable one.
Expected
The README Scheduler section says hot/new items are checked hourly, so frequent passes on a new item are expected. However, #1052 (closed 2026-08-08) describes this exact effect as a defect: "unchanged items are re-reviewed and re-rated every pass". Its fix was meant to let scheduled passes reuse the structural review cache when nothing changed. For an item with an unchanged body, comments, reviewed target SHA and verdict, I would expect one of these:
- The pass reuses the prior review and leaves labels untouched, or
- if a fresh model review runs anyway, rating and reproduction labels are stable for identical evidence, and a removed
needs-live-reprois not re-added without new contrary evidence.
Actual
Each pass publishes a fresh review and rewrites rating and reproduction labels non-deterministically. Followers of the item get an email per pass and a label change on many passes, but nothing on the item changed.
Notes
- Repository:
openclaw/clawhub(the issue is from there; I have not checked whetheropenclaw/openclawitems show the same churn). - Related closed issues: Scheduled review deliveries cannot reach the structural review cache, so unchanged items are re-reviewed and re-rated every pass #1052 , Scheduled hot intake re-reviews unchanged PRs after owned comment timestamps outrun sync metadata #1006 , ClawSweeper's own review writes expire the review content cache, so unchanged heads are re-reviewed in a loop #967 , ClawSweeper command status comment edits can re-enter activity handling and churn review labels #266
- I have not traced which cache decision (
activity_changed,target_changedor another) misses here. The reviewed target SHA is identical across all revisions.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Activity
clawsweeper commentedon Oct 7, 2026
Thanks for the context here. I did a careful shell check against current
main, and this is already implemented.The merged repair restores saved-verdict reuse on current main, resolving the missing-record cause of repeated model reviews and label changes.
So I’m closing this as already implemented rather than keeping a duplicate issue open.
Review details
Best possible solution:
Retain pre-generation canonical-record hydration and the existing exact-input reuse safeguards.
Do we have a high-confidence way to reproduce the issue?
The historical missing-record failure is established by the corrected diagnosis and source contract; current main restores the prerequisite, and no live reproduction or post-merge production replay was performed in this review.
Is this the best way to solve the issue?
The merged repair uses the existing focused hydrator at the missing workflow boundary, preserving changed-evidence invalidation and full-review fallback without changing scheduler policy.
Security review:
Security review:
AGENTS.md: found and applied where relevant.
What I checked:
.github/workflows/sweep.yml:807, 69e22d843857).github/workflows/sweep.yml:804, 796958c8d866)scripts/worker-records.ts:459, 796958c8d866)src/clawsweeper-review-command-workflow.ts:1358, 796958c8d866)test/review-reliability-workflow.test.ts:243, 796958c8d866).github/workflows/sweep.yml:807, 69e22d843857)Codex review notes: model internal, reasoning medium; reviewed against 796958c8d866; fix evidence: commit 69e22d843857, main fix timestamp 2026-10-11T23:46:55Z.
holgergruenhagen commentedon Oct 7, 2026
The public Actions logs give the miss diagnostics the review asked for. Two consecutive scheduled passes on openclaw/clawhub#3921, job "Review exact event item":
CLAIM_DECISION.sourceActionsourceUpdatedAtscheduled_normal_backfill2026-10-07T06:53:32Zstructural_cache_checks=1 structural_cache_hits=0 structural_cache_revalidations=0 content_cache_hits=0 hydrations=1scheduled_normal_backfill2026-10-07T08:46:46Zstructural_cache_checks=1 structural_cache_hits=0 structural_cache_revalidations=0 content_cache_hits=0 hydrations=1In both passes,
sourceUpdatedAtfalls within seconds of ClawSweeper's own write in the previous pass: the durable comment was edited at 06:53:26 and 08:46:40, and labels were written at 08:46:32. No human activity on the item after 2026-10-06 19:49 UTC. Each pass reports zero structural and zero content cache hits and a full hydration.So for this item, the item's "last activity" is ClawSweeper's own previous publication. That matches the
activity_changedcondition described in #1052. I have not traced the code path, so the link between that timestamp and the cache miss or hot cadence is an inference from the logs.The run titles suggest this is not limited to one item. Scheduled-normal runs for other ClawHub items in the same 08:40–08:47 UTC window show high revision counts:
openclaw/clawhub#3888 rev 178: issue opened 2026-10-01, 1 commentopenclaw/clawhub#3548 rev 63: PR opened 2026-08-30openclaw/clawhub#3856 rev 55,#3863 rev 44,#3892 rev 41,#3868 rev 38I have not checked whether those revisions also changed labels.
holgergruenhagen commentedon Oct 7, 2026
Follow-up: I checked the points left open above, at
34cc1aa014a1(currentmain).1. Other ClawHub items show the same churn
Counted from GraphQL
userContentEditson the durable review comment and from issue timeline label events byclawsweeper[bot]. A "flip" is a label removed after being added, or added again after being removed.PR 3548 is 38 days old. Per
docs/scheduler.md("pull requests outside the hot window: daily"), it should be reviewed about once a day, but it is rewritten 6–9 times a day.For comparison, six of our items in
openclaw/openclaw(opened 10-02 to 10-06) have 0–7 rewrites each. Their rating changes coincide with new contributor evidence. So the churn looks specific to the ClawHub lane.2. Likely cause: the lease-comment release moves
updated_atafter the recorded owned syncsFor the two 3921 passes in the previous comment,
sourceUpdatedAtis 6 seconds after the durable comment edit of the prior pass (06:53:26 → 06:53:32, 08:46:40 → 08:46:46). The labels were synced earlier (08:46:32).docs/scheduler.md(paragraph "Exact PR review marks …") says the producer syncs the durable comment, edits labels, and then "releases (deletes) its review lease comment". Deleting that comment is a GitHub write that advancesupdated_at. I did not verify the deletion time directly, because deleted comments are not in the timeline. The constant 6-second offset is consistent with it.Both owned-activity guards compare against markers that are older than that final write:
docs/scheduler.md("Review cadence") ignores owned writes only "if GitHubupdated_atis at or before"review_comment_synced_atorlabels_synced_at. Anupdated_atfrom the later lease deletion is after both, so the item counts as having "target-side activity since the last real review: hourly". The next pass repeats the same writes, so the item never leaves the hourly bucket. That explains 3548 staying near hourly at 38 days old.activityCoveredByReview(src/review-structural-cache.ts:1173) accepts the newer activity only ifcurrentActivity <= max(reviewCommentSyncedAt, labelsSyncedAt, ownedReservationUpdatedAt).ownedReservationUpdatedAtis the reservation, not its release, so the release timestamp fails the check, and the pass misses withactivity_changed. This is consistent withstructural_cache_hits=0in both runs.classifyScheduledReviewNoop(src/scheduled-review-noop.ts:114) does recognize "trusted owned activity only" within a settling window, but it returns early for anysourceAction !== "scheduled_hot_intake". Both 3921 runs werescheduled_normal_backfill, so this guard never applies to them.The "Apply freshness" rule in the same doc already accepts a release-shaped update ("the review generation's own lease comment is gone … the latest update follows the generation's last recorded ClawSweeper write by at most five minutes"). The cadence planner and the structural cache don't seem to use an equivalent rule.
This is a reading of the code and docs plus the run logs. I have not run ClawSweeper locally. I also have not found why the
openclaw/openclawlane is less affected.holgergruenhagen commentedon Oct 7, 2026
Correction to my previous comment: the lease-comment release is not the cause. I traced it locally against
34cc1aa014a1.Actual cause. The review step reads the item's prior canonical record from
records/<slug>/items/<number>.md(src/clawsweeper-review-command-workflow.ts:696). In theevent-review-applyjob, that record is hydrated only after "Review exact event item", bydirect-setup-statefor publication. Every scheduled pass therefore starts without a prior review. The structural cache stops atmissing_review, and the content cache has no verdict to compare.In https://github.com/openclaw/clawsweeper/actions/runs/37603325532 the review ran 09:50:52–09:53:09 with
structural_cache_hits=0 structural_cache_revalidations=0 content_cache_hits=0 hydrations=1, and the record was hydrated afterwards at 09:53:15 (focused tuples hydrated repo=openclaw-clawhub items=1 records=1). The same counters appear in all 40 scheduled-normal runs sampled on 2026-10-07 10:28–11:02 UTC, 32 of which wereopenclaw/openclawitems. So the cache miss is not ClawHub-specific.What I got wrong about cadence.
docs/scheduler.mdstill describes the sync-marker exemption, but since #1007hasActivitySinceReview(src/scheduler-policy.ts:85) treats any update afterreviewed_atas activity and relies on the structural cache to suppress the review. The lease release only adds one more such update; it doesn't change the outcome. InactivityCoveredByReview, the next pass's own reservation covers the release timestamp, so it would not causeactivity_changedonce a record is present.Why ClawHub items show it so much more (inference, not measured in the planner): with 99 open items, capacity is enough to re-review every "active" item hourly. With roughly 9,400 open items in
openclaw/openclaw, a single item comes up far less often.A fix that hydrates the selected item's record before generation is in #1753 . The hourly cadence and the per-pass lease comment are unchanged there.
holgergruenhagen commentedon Oct 8, 2026
Update after 48 hours, two observations that go beyond the original report. All times UTC.
1. The churn continues after the item should have left the hot window. The README Scheduler section says hot/new items are checked hourly and that items younger than 30 days are checked daily once they leave the hot window. On openclaw/clawhub#3921 the durable review comment now has 30 revisions between 10-06 19:42 and 10-08 19:35, 13 of them in the last 24 hours (gaps between 52 and 282 minutes, median about 109). There has still been no reporter or maintainer activity since 10-06 19:49.
source_revisionas the previous oneThe other six are the first review, the pass after the reporter's reproduction comment, and four passes that coincide with new
maincommits (target SHAa18bc7496a10→c23e34ad353d→5218bd885833→5ae1941bb1a7→d044664a7636). All 30 reach the same verdict ("this still needs some work", reproduction answer "Yes"). The rating label kept moving after the report: 🐚 platinum hermit → 🦪 silver shellfish (10-07 11:34) → 🦞 diamond lobster (10-07 20:32) → 🦪 silver shellfish (10-08 11:38) → 🦞 diamond lobster (10-08 17:36), andclawsweeper:not-repro-on-mainwas added and removed three more times.I have not found the exact length of the hot window in
docs/scheduler.md, so this is an observation against the README wording, not a confirmed scheduler defect.2. It also happens in this repository. The durable review comment on this issue (#1752 (comment)) has 9 revisions. Seven of them came after the last comment here (10-07 12:26), the latest three at 10-08 04:38, 10:35 and 15:51. Here the labels have stayed stable since 10-07 13:12, so the effect is repeated review work rather than label churn.
Data source:
userContentEditsof the durable comments (GraphQL) and the issue timelines.improve(review): count only completed issues out of the bulk-filer th…
improve(review): leave completed issues out of the bulk-filer count (#…
fix(review): unchanged items are re-reviewed and re-rated every sched…