---
id: DOM-PFM-LLM-005
title: Jazz AI Conversation
realises: CON-PFM-LLM-005
product_area: platform
module: llm
revision: 1
status: draft
design_intent: open
implementation_evidence: partially-observed
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
owned_by: SVC-PFM-LLM-console-agent
readable_by: []
lifecycle: STATE-PFM-LLM-008
custom_fields: none
identity: >-
  The server generates prefixed identifiers. Scoped creation looks for a matching kind and query identity or
  draft key; messages have identifiers within their conversation. The fixed sample owner establishes no
  customer isolation.
attributes:
  - name: title
    kind: text
    required: true
    computed: false
    notes: >-
      Defaults until a person message generates a sixty-character title; explicit route titles allow up to one
      hundred and twenty.
  - name: project
    kind: reference
    required: false
    computed: false
    notes: Optional filing in a project; null means unfiled.
  - name: scope
    kind: collection
    required: false
    computed: false
    notes: 'Retains query or directory kind, identity or draft key, label and return address.'
  - name: messages
    kind: collection
    required: true
    computed: false
    notes: Keeps ordered person and assistant text with timestamps and optional applied-change markers.
  - name: archived at
    kind: date
    required: false
    computed: false
    notes: Hides the conversation from active lists while preserving its messages.
  - name: owner
    kind: text
    required: true
    computed: false
    notes: Uses the fixed sample owner rather than the authenticated person.
  - name: created and updated
    kind: date
    required: true
    computed: true
    notes: >-
      Tracks creation and most changes; some reuse and project-removal mutations do not advance the update
      time.
  - name: project name and description
    kind: text
    required: true
    computed: false
    notes: Projects require a short name and permit an optional description up to four hundred characters.
relationships:
  - to: DOM-PFM-LLM-001
    cardinality: a scoped exchange may cause one metered request per refinement; general replies cause none
    ownership: Requests retain their source facts; this relationship does not transfer request ownership.
    cross_service: true
invariants:
  - id: INV-DOM-PFM-LLM-005-01
    statement: >-
      Scoped creation reuses a matching query identity or draft key and clears its archive time; later scope
      edits do not enforce uniqueness.
    enforced_at:
      - console
    provenance: observed
    source: 'react-console:lib/agent/store.ts:createConversation'
  - id: INV-DOM-PFM-LLM-005-02
    statement: >-
      The shared server store filters the fixed sample owner and provides no authenticated-person or workspace
      isolation.
    enforced_at:
      - console
    provenance: observed
    source: 'react-console:lib/agent/store.ts:owned'
  - id: INV-DOM-PFM-LLM-005-03
    statement: General reply requests reject conversations attached to query or directory work.
    enforced_at:
      - console
    provenance: observed
    source: 'react-console:app/api/agent/conversations/[id]/messages/route.ts:POST'
  - id: INV-DOM-PFM-LLM-005-04
    statement: Removing a project retains its conversations and clears their project association.
    enforced_at:
      - console
    provenance: observed
    source: 'react-console:lib/agent/store.ts:deleteProject'
  - id: INV-DOM-PFM-LLM-005-05
    statement: >-
      Appending a person message replaces only the default title; the store preserves an existing title for a
      blank rename, although the patch schema rejects it.
    enforced_at:
      - console
    provenance: observed
    source: 'react-console:lib/agent/store.ts:appendMessages'
  - id: INV-DOM-PFM-LLM-005-06
    statement: >-
      Archive operations preserve messages and change archive and update timestamps; restore clears the
      archive marker.
    enforced_at:
      - console
    provenance: observed
    source: 'react-console:lib/agent/store.ts:updateConversation'
  - id: INV-DOM-PFM-LLM-005-07
    statement: The conversation client writes through its own routes rather than the Platform query client.
    enforced_at:
      - console
    provenance: test
    source: 'react-console:lib/agent/__tests__/client.test.ts#never routes through the query client'
physical:
  - 'console server process memory (globalThis store, no table)'
evidence:
  - >-
    react-console at baf6dae: lib/agent/types.ts, schemas.ts, store.ts, client.ts, tenant.ts,
    __tests__/client.test.ts; app/api/agent/**; components/agent/*; components/console/agent-chat.tsx;
    components/queries/query-workspace.tsx (refine, openRefine);
    components/record-explorer/use-explorer-assistant.ts.
---

# Jazz AI Conversation

## What It Models

A Jazz AI conversation is a titled message history, optionally filed in a project or attached to a query or directory. A project groups conversations and provides context for general replies. This design describes the console prototype while leaving durable ownership open.

## Identity and Attributes

The console server generates prefixed identifiers for conversations, projects and messages. Scoped creation searches for an existing query identity or draft key. Every record uses the same sample owner, so those identifiers do not establish a real person or workspace boundary. Titles, archive times and update times support browsing.

## Relationships

Live query refinement consumes metered query generation. Directory assistance uses local interpretation and name lookup. General chat sends a direct model request outside Platform accounting. The query workspace and directory retain their own state and save behavior.

## Invariants

Scoped creation normally reuses and restores an existing matching conversation, but scope edits are not uniqueness constrained. Scoped conversations reject general replies. Project deletion keeps conversations and removes their filing. Archiving retains messages; message append and metadata writes remain available in the store while archived.

## How It Is Stored and Shared

Each server process keeps a shared memory store seeded with sample records. Requests reaching that process see the same sample-owner records. Restart loses authored changes, and separate instances have independent copies. Platform stores no conversation history at this revision.

## Open Design Questions

Product must choose durable ownership, personal or shared projects, retention, deletion, evidence handling and access policy. A proposed customer-ready boundary uses isolated durable storage and metered general replies with permission and AI-switch checks.
