mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 04:07:04 +00:00
A question card no longer dies with its author (owner decision В17a=A, which explicitly retired 30=A). Expiry stays structural — the task-done seam still flips an unanswered card to expired_terminal — but the answer ingress now accepts an answer on that expired block, records it with answered_after_terminal for audit, and keeps first-answer-wins exactly as it was. Because a finished task has no mailbox anyone will drain, the recorded answer is delivered into the card's own chat as the owner's OWN message through the named ingress accept_local_message: its canonical chat row is the acceptance receipt and its client_message_id (quiz_late_answer:<task>:<quiz>) is the idempotency key, so a retry after a failed delivery re-enters the same delivery instead of enqueueing twice. The message text is the existing full _quiz_answer_frame, untrimmed; provenance rides its own task_metadata field so the real transport's client_surface is never substituted; and the owner gets the same WS echo bubble their own typing produces. The 2xx now says answered_after_terminal and forwarded, with a reason_code when the card's chat is synthetic A2A traffic or the hidden partition — a destination with no owner turn to start. 409 is left for a card that was already answered, so the ingress stops fabricating an expiry on a bare refusal. record_asked stores the card's chat_id (and a waiting asker's max_wait_minutes) so the delivery addresses where the card was shown, with address_task_event as the fallback for older blocks. On the web the card stays answerable after its task finishes: the option buttons and the free-answer field survive expired_terminal (only answered or superseded turn the card into a record), the status reads "Task finished — you can still answer", the project pointer reads "Answer still possible" and keeps refreshing, and a bodyless 409 no longer invents an expiry the card obeys. Telegram reports the same two outcomes honestly. Without the web half the feature would have been reachable from Telegram alone. Disclosed properties: in a project room with exactly one live steerable root task the ordinary routing hands the late answer to THAT task's mailbox; and a card evicted by the 16-block cap answers 404, because it is genuinely no longer known. Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| telegram | ||
| unix_computer_use | ||