Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

fix(chat): the table pill also shows when re-reading an existing table

merged#2905CedarCopilot

CedarCopilot wants to merge 1 commit into staging from fix/table-read-result-pill

Live on prod, watching, 2 days leftTimeline and evidence
  1. Opened
    Sep 23, 2026, 2:45 AM
  2. Live on staging
    Sep 23, 2026, 2:47 AM
  3. Pipelines steady after this deploy
    Sep 23, 2026, 2:47 AM
  4. Merged
    Sep 23, 2026, 2:47 AM
  5. Live on prod
    Sep 23, 2026, 2:47 AM
  6. Observed 0 hours
    Sep 23, 2026, 2:47 AM
  7. Watching

    Live on prod, watching, 2 days left

    Sep 23, 2026, 2:47 AM
  8. Pipelines steady after this deploy
    Sep 23, 2026, 2:47 AM
  9. Sep 23, 2026, 2:55 AM

Behaviors Libra is checking

Successfully re-reading an existing table displays a functional table result pill/card with an Open action instead of only the inert `Table: <path>` tool-call label.Not checked
prod
When a table tool successfully re-reads an existing table, the conversation shows the same clickable table card with an Open action used for newly created or imported tables.Not checked
staging

Libra has verdicts on 0 of 1 tracked behaviors on prod; 1 is still being checked. Libra checks hourly for 3 days after each deploy.

Summary

  • Follow-up to #2902. That fix only covered a table's create/import tool-result, mirroring attachTableToThread's context-chip gate , but read is the action a "show me the table" follow-up in a new conversation actually calls, and it still fell through to null. All the user saw was the tool-call's own inert Table: <path> argument row (describeToolCall), which looks like a chip but isn't clickable , while the agent's own text claimed "attached above as a chip."
  • Adds read to TableResultRenderer's gate. Tradeoff called out in the code comment: an incidental internal read (e.g. a row-scoped fan-out peeking at other rows) can now also surface a pill , acceptable since the common path this covers is the user-facing one.

Test plan

  • pnpm --filter @zero/mail run types , no errors in the changed file or new symbols (remaining errors are pre-existing generated-artifact gaps in a fresh worktree, unrelated to this change).
  • In an existing conversation, ask the agent to re-show a previously created table and confirm the transcript renders a clickable pill.

🤖 Generated with Claude Code

RetriggerConfidence Score: 4/5

The PR appears safe to merge, with a non-blocking transcript-clutter issue for table fan-out operations.

Findings

  1. P2 Internal reads create extra pills ▶
Fix with agent prompt
### Issue 1
apps/mail/modules/cedar-os/src/components/renderers/messageRenderers.tsx:359
Including every `read` result also exposes internal row-agent reads during a table `fill`. Each row agent reads before writing, and those tool results are added to the visible main-thread transcript, so one fill can display many redundant Open-table pills. Restrict this affordance to user-facing reads or suppress subagent read results.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

This PR extends table tool-result rendering so successful read operations display the existing clickable Open-table pill.

  • Reuses WriteDocumentResultRenderer for read results.
  • Leaves mutating actions such as set, add_rows, and fill excluded.
  • Also causes internal fan-out reads to surface redundant pills in the visible transcript.

Reviews (1) · Last reviewed commit: "fix(chat): the table pill also shows whe..."

Show production surfaces and changed-file mapping

Production surfaces

Libra has not measured any production surfaces for this change yet.

Changed files → surfaces

  • apps/mail/modules/cedar-os/src/components/renderers/messageRenderers.tsxno production surface mapped