Assessment date: 2026-09-11. Source baseline: 1d545a6bb9
(oshun-mobile-parity-2026-07-04, merged with origin/main).
Verdict: Eve cannot generate images, video, music, or 3D models from the
conversation, and none of her three chat surfaces can show such media inline or
as an artifact. The generation toolchains exist elsewhere in the monorepo
(Isis image/video/music/3D, Bellona text-to-3D, the opt-in image/TTS media tool
in the Hermes-parity library) but none is mounted in Eve's governed BFF toolset,
the turn request accepts text only, the shared reply renderer has no image,
audio, video, math, or diagram node, and the model registry records the media
leg as not admitted (task 15.1). Beyond media, the surfaces are behind
ChatGPT and Claude.ai on file attachments, artifact/canvas workspaces, code
presentation, turn editing and branching, conversation management, mode/tool
selection, web search, data analysis, and long-running task delivery. Every gap
below is bound to a task in
EVE_SOTA_GAP_CLOSURE_TODOS_2026-09-01.md.
This is an assessment, not an implementation or release-admission change. It records what the source shows on the stated baseline; it does not claim any new capability, and it does not lower the bar for the tasks it creates.
Reference products and what "parity" means here#
Two public assistant interfaces were used as the dated comparison set, as observed on 2026-09-11 from their published product pages and in-product behaviour: OpenAI ChatGPT (web, desktop, mobile) and Anthropic Claude.ai (web, desktop, mobile). Both are moving targets; this record names the feature classes they share, not a screenshot of either. Parity is a measured usefulness outcome for the operator, not a badge: a feature counts only when a real journey through Eve's own governance (intent ledger, confirm cards, privacy boundary, capability declarations) produces the same operator outcome. Copying chrome without the governed path would violate the charter.
Feature classes shared by both references and treated as the baseline:
- Composer: text with multi-line input, stop generation, file and image attachment (upload, paste, drag-drop, mobile camera/library), dictation, duplex voice mode, a picker for tools/modes (search, research, create image, canvas, extended thinking), model or effort selection, prompt starters, slash/mention shortcuts for saved instructions and tools.
- Transcript: full Markdown with syntax-highlighted code blocks that carry a language label and copy/download controls, math, diagrams, inline images and media players, collapsible reasoning/tool activity, cited sources with links, per-message copy, feedback, read-aloud, regenerate, edit-and-resend with version navigation, share and export.
- Artifact workspace (Claude Artifacts, ChatGPT Canvas): a side-by-side panel for code, documents, HTML/SVG/React previews, data tables and generated media, with versions, in-place edits by the assistant, download, save, and publish decisions.
- Conversations: auto-titled history with search, rename, pin, archive, delete, folders/projects with files and instructions, temporary chats, cross-device resume.
- Personalisation: visible memory with edit/delete, custom instructions or personality, theme and accessibility settings, connectors (drive, mail, code hosts, MCP servers), scheduled tasks, data controls.
- Agentic work in chat: web search with source cards, deep research with a cited report, data analysis with sandboxed code execution and file/chart outputs, computer use with a live view, long-running task progress and completion notifications.
- Media generation: image creation with edits/variations (both), video creation (ChatGPT via Sora). Neither reference ships native music or 3D generation; Oshun has toolchains for both, so those rows are beyond-parity charter requirements rather than parity gaps.
Surfaces audited#
| Surface | Source | Transport | Renderer |
|---|---|---|---|
| Admin copilot drawer (builder side) | AdminAssistantChat.tsx, AdminAssistantPanel.tsx |
incremental SSE with buffered fallback | shared markdown.tsx |
| Member web panel and dock (Lilith) | AssistantPanel.tsx, AssistantDock.tsx, ReplyDetails.tsx |
incremental SSE | shared markdown.tsx |
| Mobile sheet (React Native) | MobileAssistantSheet.tsx, MobileAssistantProvider.tsx |
buffered JSON (task 8.4 open) | plain text; the shared renderer is React DOM and is not imported here |
Server contract:
routes/assistant.ts exposes
sessions (create, list, delete), turns (text, inputMode, locale,
contextHandoff, pageContext, clientCapabilities only), cancel, feedback,
actions, audio (speech-to-text), tts, client-tool results, tour submissions,
metrics, and telemetry. There is no attachment, artifact, generation-job, or
share endpoint.
Crosswalk#
Status vocabulary: ships (source and coverage found), partial (a narrower or recovery-only form exists), absent (no source path). Evidence is the file or contract that decides the status. "Task" names the ledger owner that must close the row.
Composer and input#
| Feature | Admin | Web | Mobile | Evidence | Task |
|---|---|---|---|---|---|
| Text prompt, stop generation | ships | ships | ships | Stop assistant reply controls; turns/:turnId/cancel route; cancellation release gate spec |
8.5 (post-cancel side-effect gate) |
| File/document attachment (PDF, docs, sheets) | absent | absent | absent | turn body accepts text plus context fields only; no upload route; no type="file" input on any surface |
8.13, 14.8, 17.24 |
| Image attach, paste, drag-drop, camera | absent | absent | absent | no onPaste/onDrop/dataTransfer handlers; the only image path is the server-initiated single page screenshot (inspect_page), ephemeral and never persisted |
8.13, 17.24 |
| Dictation (speech-to-text) | ships (browser dictation) | ships (MediaRecorder → /audio) |
absent (direct text submission) | task 8.1 baseline note; README.voice.md |
8.7 |
| Duplex voice mode, barge-in, VAD | absent | absent | absent | 8.1 baseline: "not duplex voice-first" | 8.7 |
| Tool/mode picker (search, research, create media, canvas, think longer) | absent | absent | absent | no picker component; tool selection is server-side routing only | 8.18 |
| Model or effort selection | absent | absent | absent | no select/model control; registry-bound routes only |
8.18, 15.7 |
| Prompt starters | absent | ships | partial (quick actions tray) | web suggestion chips; admin has command palette but no starters | 8.18 |
| Slash commands, mentions of skills/tours/targets | absent | absent | absent | no composer grammar; tours start via tool call | 8.18 |
| Keyboard shortcut help | ships | partial | n/a | KeyboardShortcutsHelp.tsx; web has key handlers, no help sheet |
8.8 |
Transcript and rendering#
| Feature | Admin | Web | Mobile | Evidence | Task |
|---|---|---|---|---|---|
| Markdown: paragraphs, nested lists, GFM tables, links, RTL | ships | ships | absent (plain text) | markdown.tsx closed subset; no import in the mobile sheet |
8.14 |
| Code blocks with language label, syntax highlight, copy/download | absent | absent | absent | fences render as <pre>; no highlighter, no per-block control |
8.14 |
| Math (LaTeX) | absent | absent | absent | no math node in the renderer | 8.14 |
| Diagrams (Mermaid or equivalent) | absent | absent | absent | no diagram node | 8.14 |
| Inline images in replies | absent | partial (card imageUrl carried, never rendered) |
absent | AssistantResponseCard.imageUrl in types.ts; the only <img> on web is the page-screenshot preview |
8.14, 17.23 |
| Audio/video players, 3D viewer in transcript | absent | absent | absent | TTS plays through an audio object; no media node | 8.14, 17.23 |
| Tool activity and evidence panel | ships (Activity list) | ships (ReplyDetails, evidence, tool filter) |
partial | admin turnActivity; web reply inspection |
8.16 |
| Collapsible reasoning stream | absent | absent | absent | small-model turn route; no reasoning frames in turn-stream-frames.ts |
8.16 (decision) |
| Citations and sources | partial (docs only) | ships (docs, grounded cards) | partial | citation-claim checks; docs search is the only retrieval source | 17.26 (web sources) |
| Copy reply | absent | ships | absent | Copy this reply only on web |
8.16 |
| Per-turn feedback with reasons | absent | ships | absent | /turns/:turnId/feedback route exists; only web renders feedback controls |
8.16 |
| Read aloud per reply | ships (conditional) | ships | absent | /tts route; voice config |
8.16 |
| Regenerate (same or alternate route) | absent | absent | absent | no regenerate control; web "Edit message" is a post-failure recovery affordance that resends the same text | 8.16 |
| Edit-and-resend with branch/version navigation | partial (recovery only) | partial (recovery only) | partial (Edit message label) |
all three surfaces expose recovery editing; no branch model in AssistantTurn or version navigation |
8.16 |
| Share link, export (Markdown/JSON) | absent | partial (save grounded reply as Nisaba notebook) | absent | no share/export route | 8.16, 14.8 |
| Typed generative UI (confirm/status/evidence intents) | ships | ships | absent | task 8.6 closed; generative-ui.ts allowlist |
8.15 extends |
| Streaming with live region | ships | ships | absent (buffered) | 8.1 baseline | 8.4 |
Artifact workspace#
| Feature | Admin | Web | Mobile | Evidence | Task |
|---|---|---|---|---|---|
| Side-by-side artifact panel (code, doc, HTML/SVG preview, data table, media) | absent | absent | absent | no artifact type in types.ts or stream frames; contextHandoff.artifact is an input label only |
8.15 |
| Versions, diff, assistant edit-in-place | absent | absent | absent | no artifact store bound to sessions | 8.15 |
| Download, save to owning domain, publish decision | absent | partial (Nisaba notebook save) | absent | one-off save path | 8.15, 14.8 |
Conversation management#
| Feature | Admin | Web | Mobile | Evidence | Task |
|---|---|---|---|---|---|
| History list and switch | absent | ships (Previous sessions) |
partial (Assistant turn history) |
GET /v1/assistant/sessions; admin creates sessions but lists none |
8.17 |
| Auto titles | partial | partial | partial | sessions carry metadata but no generated title surfaced | 8.17 |
| Rename, pin, archive, delete | absent | absent | absent | DELETE /v1/assistant/sessions/:sessionId exists; no UI calls it |
8.17 |
| Search across conversations | absent | absent | absent | no search route or control | 8.17 |
| Projects/folders with files and instructions | absent | absent | absent | no grouping model | 8.17 |
| Temporary chat | partial | partial | partial | memoryScope: 'off' | 'session' exists; no explicit temporary-chat affordance or non-persistence guarantee |
8.17, 9.2 |
| Cross-device resume | partial | partial | partial | durable session store with integration spec; no cross-client hand-off UI | 8.17 |
Personalisation and settings#
| Feature | Admin | Web | Mobile | Evidence | Task |
|---|---|---|---|---|---|
| Memory view, edit, delete | partial | partial | partial | remember_operator_note/forget_operator_memory tools; memory state components; task 9.2 open |
9.2 |
| Custom instructions / personality | partial | partial | partial | persona switchers disabled with routing copy (8.1); invocation-seeded persona only | 8.18 |
| Theme, reduced motion | partial | ships | partial | web honours prefers-reduced-motion; admin shell theme |
8.8 |
| Connectors and MCP servers | absent | absent | absent | Phase 16 has no UI | 16.x (no new task; noted for 18.3) |
| Scheduled tasks / watchers UI | absent | absent | absent | watcher semantics specified (7.3); UI gated by 7.4 | 7.4, 8.19 |
| Data controls (export, delete) | partial | partial | partial | Phase 14 open | 14.4, 14.8 |
Agentic work in chat#
| Feature | Admin | Web | Mobile | Evidence | Task |
|---|---|---|---|---|---|
| Web search / browse with source cards | absent | absent | absent | Eve BFF tools: search_docs, read_page, inspect_page, domain tools only; the web-search/browser tools in @oshun/assistant are unfused (7.1) |
17.26 |
| Deep research with cited report | absent | absent | absent | no research mode | 17.26 |
| Data analysis / sandboxed code execution with file and chart outputs | absent | absent | absent | code-exec.tool.ts exists in the unfused library; no sandbox admission |
17.25 |
| Computer use with live view | absent | absent | absent | Phase 6 | 6.6–6.8 |
| Long-running task progress and completion notifications | absent | absent | absent | no background job cards; notification center is admin-only and not chat-bound | 8.19 |
Media generation#
| Feature | Admin | Web | Mobile | Reference | Existing Oshun toolchain (not reachable from Eve) | Task |
|---|---|---|---|---|---|---|
| Image generation, edits, variations | absent | absent | absent | ChatGPT, Claude (via connectors) | @isis/ai-providers Flux/SD3.x adapters; opt-in media.tool.ts image generator + filesystem sink |
15.7, 17.22, 17.23 |
| Video generation | absent | absent | absent | ChatGPT (Sora) | @isis/seedance-provider, @isis/ai-video, @yemaya/video-generation |
15.7, 17.22, 17.23 |
| Music / audio / speech generation | absent (TTS ships for replies) | absent | absent | neither reference natively | @isis/music-generation (suno/udio/musicgen/stable-audio), @isis/audio-generation, existing TTS route |
15.7, 17.22, 17.23 |
| 3D model generation and viewer | absent | absent | absent | neither reference natively | @isis/3d-generation (Rodin), @bellona/text-to-3d (Meshy/Tripo), @isis/3d-browser |
15.7, 17.22, 17.23 |
| Provenance, disclosure, licence on generated media | absent | absent | absent | both label generated images | task 14.7 governs; nothing is wired because nothing generates | 14.7, 17.22 |
Why the media rows are absent, precisely#
- The governed toolsets Eve actually mounts are
agent-tools.ts,admin-agent-tools.ts, and the workbench-kit read/write/command tools. None calls a generator. - The only Eve-adjacent generation tool,
media.tool.ts, lives in the Hermes-parity library whose fusion scope task 7.1 recorded as unfused; its sole BFF consumer is the V10 Ori presence runtime, not the assistant route. - The model registry (task 15.1 note) lists the media leg as not admitted, so even a mounted tool would have no priced, fail-loud route.
- The turn contract carries no attachment, and the stream frames carry no artifact or media frame, so a generated file would have no way to reach a surface or be rendered when it arrived.
- Privacy (14.7/14.8), security (Phase 4 gate), and evaluation (Phase 12) admission for generated and uploaded media has not been done.
Bound tasks#
The 2026-09-11 chat-surface parity expansion adds tasks 8.12–8.20, 12.11, 14.8, 15.7, and 17.22–17.27 to the ledger. Tasks 8.9 and 18.1 now depend on the expansion so that Phase 8/G9 and final closure cannot pass with these rows open. Every new task starts unchecked; this document proves nothing about any of them.
Task 8.12 ratification (2026-09-16)#
The dated crosswalk is now adopted as the source-owned
eve.chat-surface-parity.v1
register and validated by
eve-chat-surface-parity.schema.json. It
contains all 53 feature rows, all 159 per-surface statuses, exact owner task
IDs, deciding evidence, and source anchors for every one of the 54 ships or
partial claims. The anchors resolve against the immutable audited revision
1d545a6bb947910c5f303c70da04bd3d33981bf0, so subsequent product work cannot
silently rewrite what this dated assessment observed.
Ratification corrected two prose classifications before adoption: mobile
per-turn feedback is absent because only the web surface renders feedback
controls, while the admin drawer's failure-recovery edit control makes
edit-and-resend partial (recovery only), matching web and mobile. Placeholder
owners were also made executable: connectors/MCP binds to Tasks 16.5 and 8.18,
and computer use expands to Tasks 6.6, 6.7, and 6.8.
The verifier fails closed when a row is omitted, a status lacks deciding evidence, an absent or partial row loses its exact ledger owner, a positive claim lacks a source anchor, an anchor is absent from the dated source, source bytes change, or outcome parity is weakened to copied chrome. This ratification changes no user-facing source and closes only Task 8.12; every downstream feature owner and Phase 8 remain open.