---
title: "Human Inbox projects canonical Channel attention"
version: "en"
---

> Documentation Index
> Fetch the complete documentation index at: https://botharness.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Human Inbox projects canonical Channel attention

> Status: Accepted

# Human Inbox projects canonical Channel attention

The Human Inbox is an independent Bot mode view. It reads operational facts owned by Messaging instead of storing a second copy of messages or requests. Its first action-required item is a pending Group join request from a live Channel record; approving or declining uses the existing atomic Group decision. Live native DSH questions and tool approvals are action items derived from their Bot DM request Source Events, the absence of a durable answer or decision, and the existing live request services. An Assignment with a live `waiting-human` open ask is another action item, projected directly from the Assignment Directory; it carries an Assignment Session reference and opens the Bot's Assignment detail. A blocked Assignment report updates that same action item by Assignment Session ID, preserving its latest report Source Event and raising the visible state to blocked. An Orchestrator reply hides the item while the Assignment works; if it becomes idle or errors without a newer resolving report, the blocked action remains visible. A completed report or stopped Assignment removes it. A completed Assignment's latest report is another informational item, projected from its canonical Source Event and Assignment Directory row. A Human can ignore that specific report: a durable decision records only its Source Event ID, disposition, and time, not copied content. The next report from the same Assignment has a new Source Event ID and appears independently. A PersonaBot's Workspace Grant request is an action item from its canonical Bot DM Source Event. The Human's explicit approval reply carries the request message ID and active Grant ID, validated by the Host; that durable reply resolves the item without copying it into another store. Grant requests, including historical ones, resolve only from a committed Human reply carrying the validated request message and Grant IDs; localized text alone is not authorization evidence. A Channel-linked Inbox Admission in needs-repair appears as one action item per affected Bot and Source Event, projected from the same canonical admission. It keeps the original Channel and message references, opens the Bot Inbox for investigation, and disappears when that admission is resolved; a deleted source Channel degrades to the Bot Inbox without a broken link. No extra repair queue or copied message body is stored. Its first informational item is a new Bot-authored Human DM message after that Channel's durable Human read position. Opening the source returns to the Channel, and acknowledging an informational item advances the same read position used by the conversation.

The query is profile-scoped, ordered by event time and stable item ID, cursor-paged, and filterable by category, Bot, and Channel. A cursor is bound to its filters. Other typed failure notices do not fall into the generic informational bucket; they require their own action projection and resolution rules in later #126 slices.

## Why

A separate Inbox table would become a competing authority for read state and Group membership decisions. Projecting the canonical facts keeps the item, its source, and its resolution coherent after restart. The first slice reaches the Host, bridge, Client, and an operable Human path while the broader Attention Decision model in #47 grows.

## Consequences

The action and informational tabs can be independently paged without copying message bodies. Marking a DM message read clears it from the informational tab; a Group join request remains until a decision or cancellation changes its durable status. Question and tool approval actions open their exact DM cards and disappear after the Human decision or loss of the live DSH request; expired requests do not become false actions after restart. The first slice does not yet aggregate all Channel and PersonaBot attention types or offer a cross-source ignore decision. It does not compute an unread badge.

## Update (2026-10-01) — act on Grant and Assignment sources in Inbox

Inbox uses the source DM Grant card and the existing DSH folder selection plus Workspace Grant authority. The SQLite append transaction rechecks the active Bot Grant and unresolved request; concurrent windows can commit only one linked answer. This replaces the former localized-text compatibility rule because ordinary prose cannot prove authorization. Historical text remains unchanged; requests without a linked reply remain pending.

Waiting and blocked Assignment cards query their exact report Source Event with two neighboring reports on either side. A Human response is a canonical message in the owning Bot DM with a typed assignmentReply reference to the Assignment Session and report Source Event. The append transaction checks current ownership, running state, current open ask or idle blocker, and an absent prior Human response. Retrying the same message ID returns its existing commitment. A Human reply does not itself resume an Assignment or clear its ask; the Orchestrator receives the trusted address, inspects the Assignment and relays the response through its existing Assignment request operation. Completed, failed or stopped work cannot accept a new response. Ordinary progress preserves an unresolved open ask; a weaker waiting report cannot replace a stronger blocked ask.

## Update (2026-10-02) — canonical handled Human actions

Answered questions, tool approval decisions, Grant replies and addressed Assignment responses are a Handled projection of the first canonical typed Human response to each original Source Event. Request and answer navigation retain those authorities; reading or ignoring informational updates cannot manufacture a decision. The query starts from response events and follows indexed Channel placements or Source Event identities to requests, avoiding a per-request scan of the reply history. It adds no history table.

Human action completion and Bot reply forwarding are separate facts: a committed Assignment response removes the Human action while the runtime ask remains available for the Orchestrator. A later explicit ask replaces an already Human-answered blocked address; a weaker update to an unanswered blocked ask still preserves that address. Historical native cards query their exact canonical response outside the bounded neighboring messages, so restart or an expired native broker does not change the recorded decision. Client reconciliation is limited to three 50-item pages per refresh and resumes older history from a fresh canonical cursor, keeping work bounded and resolved cards out of retained pages.

Human response targets and event times use Messaging-owned SQLite indexes. Lists beyond 150 loaded items explicitly pause automatic polling while the Human browses older rows; the visible Refresh current list action preserves filters and reconciles up to three pages with a fresh cursor. Load more does not truncate the viewed rows. Successful action commands still refresh canonical state.

Source: https://botharness.ai/dev/adr/0071-human-inbox-projects-channel-attention/index.mdx
