CedarCopilot wants to merge 4 commits into staging from feat/inbox-client-composed-feed
Live on prod since Thu, 1 of 7 behaviors working
Since the deploy, 250 prod OTEL spans matching GET /conversations/* ran with 0 error spans. In the 61h before the deploy the same surface ran 117 OTEL spans with 0 error spans. Confidence is medium because the surface was already clean before the deploy, so this confirms no.
Verification cited only 5 matching post-deploy events, below the 20-event floor for calling a change verified. Nothing is failing; there is not yet enough traffic to confirm it.
Verification cited only 6 matching post-deploy events, below the 20-event floor for calling a change verified. Nothing is failing; there is not yet enough traffic to confirm it.
Post-deploy telemetry shows 640 concrete citation-producing tool-call logs: 568 web-search and 72 web-fetch. OTEL recorded successful execute_tool web-search and execute_tool web-fetch spans with p95 latencies of 2.508s and 10.129s, respectively, and no tied error spans. Exact.
Verification reached its budget before a verdict.
No concrete GET /agent redirect or canonical /home navigation telemetry was found in the inspected production spans since 2026-09-03T19:28:54Z. The only matching records were unrelated agent execution operations. Source confirms the client implementation uses Navigate to /home.
Libra has verdicts on 1 of 7 tracked behaviors on prod; 6 are still being checked. Libra checks hourly for 3 days after each deploy.
This branch is the chat surface growing up: an answer that cites its sources and opens the document it wrote, an agent that is a document you can open and rename, and a table whose columns pull live Cedar data. Plus the findings from reviewing all of it.
Chat and citations. A web source renders as the site's badge rather than a URL dropped
into the prose, an event citation says which meeting (Meeting · Aug 12) instead of just
"Meeting", and every citation badge is now the same object the rest of the app uses ,
bg-sunken, rounded-full, the event type carried as text colour rather than as its own
five-chip palette. display-document is gone: writing a document attaches it, so there is no
second verb for the model to remember and no blunt reach that yanks away what you were reading.
Agents. Four namespaces, a default file, and an agent document that opens as the agent , five surfaces used to render a subagent doc as generic prose with its YAML frontmatter showing. The title is now editable in place, displayed as the pretty form and saved as the slug the chat harness registers it under, with duplicates refused rather than silently shadowing.
Archive. Archiving an open thread was a no-op on every tab whose slug is not literally
inbox , the Important and Other tabs, a custom inbox, All Mail. moveThreadsTo resolved to
no labels, logged No labels to modify, and never made the request.
Ten bugs, fixed in fix(review): …. The ones that would have hurt:
chat_messages.citations was typed event-only while the frontend had already widened to
an event | web union. Four as Citation[] casts were the only thing hiding it, so a server
reader of a persisted web citation got undefined for quote with no type error. Column now
carries the real union; the casts are a zod parse at the boundary.[N] was grey text until the
canonical reload, and forever if the user cancelled.openWrittenDocumentIfPanelIdle checked only whether the active thread's panel was empty.mutateThreadContext is a non-atomic read-modify-write of one JSON column. Harmless while
attach-on-write sat behind a flag no call site set; now unconditional for every chat-turn
write, and agents emit parallel tool_use blocks , so the second UPDATE dropped the first
one's chip. Now one transaction with the row locked.is_list_field = false filter turned it into
"every value ever extracted for every deal on the page", on every table read, with eight able
to reach a cell. Bounded in SQL with row_number() per (conversation, field) , a global
LIMIT would have let one talkative deal eat the budget.classifyAgentPath
throws on an over-matched row rather than misfiling it, and agentId reaches it from
frontmatter.createBoard scanned org-wide for a collision, but board uniqueness is
(orgId, userId, path) , one teammate's "New board" numbered itself off boards they cannot see.agent.create wrote defaultFile unvalidated while setDefaultFile validated it, so a
create-time ../other was silently discarded on read.Plus an eager import that put TipTap back into the home bundle it was being lazy-loaded out of (and closed a real `Age
Libra has not measured any production surfaces for this change yet.