agentHomeHero.test.tsxfeat(tables,chat): make a document from the composer, and let the agent build it with you
The composer's `+` creates a document, table or board, opens it beside the chat and
attaches it — and the chat opens with the agent explaining what the thing is for, so
an empty grid teaches what to ask of it. The artifact panel that holds it is now the
agent view's geometry (back gutter, centered column, editable title, no divider)
rather than a bordered strip with an X.
Prompts move out of the middle of the empty chat: the file surface's cards are a tab
in the pinned strip, which is now the only place the chat offers one.
Server-side, an attached table stops looking like markdown the agent could rewrite
whole: it carries a brief naming the `table` tool, the schema frontmatter as its
marching orders, and the loop for building one WITH the user — propose the columns
and their fill instructions, source the rows, then fan out in parallel. The
`documents` skill also gains the `table` tool it had been documenting without
providing on the granular surface.
Co-Authored-By: Claude Opus 5 (1M context) <<email>>Sep 2, 2026, 6:58 PMagenticTable.test.tsfeat(tables,chat): make a document from the composer, and let the agent build it with you
The composer's `+` creates a document, table or board, opens it beside the chat and
attaches it — and the chat opens with the agent explaining what the thing is for, so
an empty grid teaches what to ask of it. The artifact panel that holds it is now the
agent view's geometry (back gutter, centered column, editable title, no divider)
rather than a bordered strip with an X.
Prompts move out of the middle of the empty chat: the file surface's cards are a tab
in the pinned strip, which is now the only place the chat offers one.
Server-side, an attached table stops looking like markdown the agent could rewrite
whole: it carries a brief naming the `table` tool, the schema frontmatter as its
marching orders, and the loop for building one WITH the user — propose the columns
and their fill instructions, source the rows, then fan out in parallel. The
`documents` skill also gains the `table` tool it had been documenting without
providing on the granular surface.
Co-Authored-By: Claude Opus 5 (1M context) <<email>>Sep 2, 2026, 6:58 PMDisplayArtifactPanel.test.tsxfeat(tables,chat): make a document from the composer, and let the agent build it with you
The composer's `+` creates a document, table or board, opens it beside the chat and
attaches it — and the chat opens with the agent explaining what the thing is for, so
an empty grid teaches what to ask of it. The artifact panel that holds it is now the
agent view's geometry (back gutter, centered column, editable title, no divider)
rather than a bordered strip with an X.
Prompts move out of the middle of the empty chat: the file surface's cards are a tab
in the pinned strip, which is now the only place the chat offers one.
Server-side, an attached table stops looking like markdown the agent could rewrite
whole: it carries a brief naming the `table` tool, the schema frontmatter as its
marching orders, and the loop for building one WITH the user — propose the columns
and their fill instructions, source the rows, then fan out in parallel. The
`documents` skill also gains the `table` tool it had been documenting without
providing on the granular surface.
Co-Authored-By: Claude Opus 5 (1M context) <<email>>Sep 2, 2026, 6:58 PMHomeView.test.tsxdocs: seed layout-shell wiki + fix stale HomeView test; pause url-driven-layout 3-7
- Seed apps/mail/docs/wiki/layout-shell.md: 3-column shell architecture,
the persistent AppShell/PersistentShell perf model, and the load-bearing
URL-sync gotcha (conversationSection + hotkey scope, no e2e harness).
- Fix pre-existing stale HomeView.test.tsx (HomeView no longer mounts the
deleted FullScreenChat — it's just the DisplayArtifactPanel context column).
- Record in the design doc why Phases 3-7 are paused for supervised/app-running
execution (interlocked; not headless-gateable) + inline migration note on
thread-conversation-url-sync.
Co-Authored-By: Claude Opus 4.8 (1M context) <<email>>Jul 13, 2026, 12:50 PMperMessageOpenContext.test.tsxfeat(chat): a document you can open, and sources you can click
Writing a document is the whole gesture now. It attaches to the thread as a
chip and opens beside the transcript when nothing else is open there; if the
user is already reading something, it stays put and the chip is the way in.
`display-document` is gone — asking the model to remember to reshape someone
else's screen meant it usually didn't, and when it did it took the panel
regardless of what was in it. `attachToContext` goes with it: no caller set
it and the `document` family never declared it, so on that surface it could
not be reached at all. Guards on what the doc IS (no thread, a buffer path, a
fan-out row scope) do the work the flag was pretending to.
The card was also dead on arrival on the family surface: those tools nest
their payload under the action key and only the SDK harness un-nested it, so
`result.id` was undefined and the row rendered an inert "Document written"
with no filename. Same shim now runs on the Mastra path.
`getDisplayArtifact()` returns null when nothing is open. Its `agenda`
default was a lie about the app — the panel resolves its own resting content
and never read that branch — and its only real effect was making "nothing is
open" un-expressible.
Web claims carry a source badge instead of a link in the prose. The research
tools number every page they find, stable for the run, and the answer's `[N]`
resolves against the sources that existed when it was written — not a
thread-wide list, which would relabel every badge on screen the moment a
second search ran.
Co-Authored-By: Claude Opus 5 <<email>>Sep 3, 2026, 12:08 AMthreadTitleProcessor.test.tsxfeat: agent-generated thread title (design: chat-context-set phase 8)
set-thread-title tool (name + optional summary in context jsonB, thread-title-updated
SSE); workflow nudges the agent to title only in the first 1-2 responses while the
title is a placeholder; frontend processor updates the name live. isDefaultThreadTitle
helper. Unit + gated e2e + jest tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <<email>>Jul 5, 2026, 11:27 PM