04549a7df5d18b0e3c1a97b7ca2b96104b04bf60
Gitea's notifications feed names no per-row reason, so the adapter collapses every row under one fixed NotificationReason::Other spelling — and the claw's triage mapped every Other to Surface: the notification reached the device queue and never a dispatch. A comment on a thread the account authored could therefore never wake the agent on a reason-less forge, whatever the watches said. The adapter now publishes that spelling as gitea::COLLAPSED_REASON — it is the seam's contract, not a detail — and the triage treats it as the known shape it is: a notification on a thread of the account's own dispatches the implementer. A spelling no adapter owns still surfaces; an unknown shape remains the user's to judge, never the agent's to guess at.
Languages
Rust
74.9%
Kotlin
13.8%
Vue
7.1%
TypeScript
3%
Dockerfile
0.5%
Other
0.6%