Matrix intake: main-timeline nudge, clearer messages, note text in grid
Four bot-side UX fixes surfaced by the live smoke: - Post a brief pointer in the main timeline (a reply to the user's message) alongside the in-thread proposal card, so proposals aren't missed inside a thread. Pointer only — approvals still happen in the thread, where the note is visible (you can't make an informed yes/no without seeing it). - A bare yes/no typed in the main timeline while a proposal is pending now gets a "reply in the thread" redirect instead of "couldn't tell what to record." - Clearer commit confirmations: "Created a new grid entry for X" vs "Logged a note on X (existing grid entry)." - Send a blank communication subject when a note is present so the grid's one-line note summary shows the note text, not the "(Matrix)" label (provenance stays in source="matrix_intake").
This commit is contained in:
@@ -31,10 +31,18 @@ async def main():
|
||||
client = AsyncClient(mx["homeserver"], mx["user_id"])
|
||||
client.restore_login(user_id=mx["user_id"], device_id=mx["device_id"], access_token=mx["token"])
|
||||
say = matrix_io.make_say(client)
|
||||
nudge = matrix_io.make_reply(client)
|
||||
store = proposals.ProposalStore()
|
||||
intake_room = mx["intake_room"]
|
||||
|
||||
async def handle_intake(room_id, root, text):
|
||||
# A bare yes/no/approve typed in the MAIN timeline (not inside a proposal's thread) is
|
||||
# an easy slip — point the user back to the thread rather than parse it as a new intake.
|
||||
action, _ = proposals.interpret_reply(text)
|
||||
if action in ("approve", "reject") and store.any_pending():
|
||||
await nudge(room_id, "👉 To approve, reject, or edit a proposal, open its **thread** "
|
||||
"and reply there — the note is in the thread.", root)
|
||||
return
|
||||
try:
|
||||
proposal = await asyncio.to_thread(parse.parse_message, text)
|
||||
except Exception as exc: # Spark/Qwen unreachable or bad response
|
||||
@@ -56,6 +64,9 @@ async def main():
|
||||
pass
|
||||
store.put(root, proposal)
|
||||
await say(room_id, proposals.render(proposal) + hint, root)
|
||||
# Also drop a brief, un-threaded reply in the main timeline so the proposal isn't
|
||||
# easy to miss inside a thread (the full card + yes/edit/no stay in the thread).
|
||||
await nudge(room_id, proposals.summary_line(proposal), root)
|
||||
|
||||
async def handle_reply(room_id, root, text):
|
||||
action, payload = proposals.interpret_reply(text)
|
||||
|
||||
Reference in New Issue
Block a user