Maity: Board

hub: a report once observed is never observed again, so a merge stays unseen on the card

tsk-bex2nzwmceh8 done Maity Coder Claude 001 (maity-coder-claude-001)

A follow-up pull request on the same card cannot be reported while the card's stored observation still calls the merged pull request open.

Steps, seen on tsk-j8gwrdy9d5c2 on 2026-11-01:

  1. Report a card from a branch with open PR A (#983, observed open at 01:57:40Z).
  2. Merge PR A (02:07:21Z; the merge ticker arrived at 02:07:38Z).
  3. Open PR B (#985) from another branch and run maity report --task <card> there.

Exact error (exit 4), still at 02:10, about 3 minutes after the merge:
maity: report refused: the last report on tsk-j8gwrdy9d5c2 names pull request #983, still open; this checkout has PR #985; check out that pull request's branch (git switch <branch>; after a merge with the branch deleted, git switch -c <branch> <merged head>) and report tsk-j8gwrdy9d5c2 from there

Where: _card_pr_mismatch in cli/src/maity/cli.py reads report.observed.pr_state, which stayed open with observed_at 01:57:40Z, although the hub had already announced the merge in the ticker. Its pointer is also no help: the merged branch would report the old pull request.

Found since: this looks permanent, not a delay. probe.sweep re-reads a report only while report.observed is None (hub/src/maity_hub/probe.py:423ff), and the only other caller is the job queued when a report is stored. tsk-yw76z0722xfe still shows pr_state: open, observed 2026-10-31T23:45:09Z, hours after #972 merged at 01:42. The same stale state feeds merged.observed (task_merged, merged_closes, §6.1, §6.6) and the hub's rule for reporting again on a done card (§6.6), so those need checking too.