Problem: Backend (data/mesh_ingestor/handlers/generic.py:295-297) classifies a packet as a reaction when reply_id is not None and emoji is not None — even if the message has substantial text. Frontend
(web/public/assets/js/app/message-replies.js:288-303) mirrors this: hasEmoji && hasReplyId → reaction. A user replying "Great job! 👍" to a message gets misclassified.
Fix:
Backend (generic.py): Tighten heuristic — require REACTION_APP portnum OR (reply_id + emoji + text is empty/single-emoji/numeric-placeholder). Add _is_likely_reaction(portnum, reply_id, emoji, text) helper.
Frontend (message-replies.js): Add text-content check in isReactionMessage() — if message carries meaningful text beyond a bare emoji or numeric slot, return false even when hasEmoji && hasReplyId.
Tests: Cover:
REACTION_APP portnum + emoji → true reaction
reply_id + emoji + no text → true reaction
reply_id + emoji + substantial text → NOT a reaction (the broken case)
web/public/assets/js/app/tests/message-replies.test.js — new cases
Problem: Backend (data/mesh_ingestor/handlers/generic.py:295-297) classifies a packet as a reaction when reply_id is not None and emoji is not None — even if the message has substantial text. Frontend
(web/public/assets/js/app/message-replies.js:288-303) mirrors this: hasEmoji && hasReplyId → reaction. A user replying "Great job! 👍" to a message gets misclassified.
Fix:
1. Backend (generic.py): Tighten heuristic — require REACTION_APP portnum OR (reply_id + emoji + text is empty/single-emoji/numeric-placeholder). Add _is_likely_reaction(portnum, reply_id, emoji, text) helper.
2. Frontend (message-replies.js): Add text-content check in isReactionMessage() — if message carries meaningful text beyond a bare emoji or numeric slot, return false even when hasEmoji && hasReplyId.
3. Tests: Cover:
- REACTION_APP portnum + emoji → true reaction
- reply_id + emoji + no text → true reaction
- reply_id + emoji + substantial text → NOT a reaction (the broken case)
- Numeric emoji codepoint values
- Placeholder slot values ("1")
Files:
- data/mesh_ingestor/handlers/generic.py (lines 240-301)
- web/public/assets/js/app/message-replies.js (lines 288-303)
- tests/ — new or expanded reaction test cases
- web/public/assets/js/app/__tests__/message-replies.test.js — new cases
<!-- github-comment-id:4251036080 -->
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.
what is this even?
Problem: Backend (data/mesh_ingestor/handlers/generic.py:295-297) classifies a packet as a reaction when reply_id is not None and emoji is not None — even if the message has substantial text. Frontend
(web/public/assets/js/app/message-replies.js:288-303) mirrors this: hasEmoji && hasReplyId → reaction. A user replying "Great job! 👍" to a message gets misclassified.
Fix:
Files: