24596842ea
The AI "Ask" affordance (selection tooltip + prompt bar) had no response surface on an entry's canonical `main` view: RFCView renders the human- discussion panel there, not the chat panel, so a chat turn posted from the reading view had nowhere to render — asking-while-reading silently did nothing. AI chat is an editing activity (a turn can emit <change> proposals) and only runs on an edit branch. Option B: when Ask is invoked from main, transparently cut an edit branch via the same dispatch as Start Contributing (promote-to-branch for active, start-edit-branch for super-draft; idempotent — reuse an existing edit branch), navigate onto it so the chat panel mounts, and run the question (text + selected quote) as the branch's first chat turn once its view and main_thread_id resolve. The turn fires from the message-load effect's continuation (not a parallel effect) so a late message load can't clobber the optimistic turn; a live ref keeps the latest submitChatTurn closure in reach. Degrades gracefully: signed-out → login; a viewer who can't contribute has the cut rejected server-side and the error surfaced (no spurious branch); asking from a branch already, and Flag on main (human discussion thread), unchanged. Frontend-only; the branch chat endpoints already work on a branch. SPEC §8.3 records the behavior; new RFCView unit tests + an e2e spec cover the flow. backend 677 / frontend 66 / e2e 5 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
42 lines
1.1 KiB
JSON
42 lines
1.1 KiB
JSON
{
|
|
"name": "rfc-app-frontend",
|
|
"private": true,
|
|
"version": "0.54.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"test": "vitest",
|
|
"test:run": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@amplitude/unified": "^1.1.9",
|
|
"@codemirror/commands": "^6.10.3",
|
|
"@codemirror/lang-markdown": "^6.5.0",
|
|
"@codemirror/language": "^6.12.3",
|
|
"@codemirror/state": "^6.6.0",
|
|
"@codemirror/view": "^6.43.0",
|
|
"@tiptap/extension-placeholder": "^3.5.0",
|
|
"@tiptap/pm": "^3.5.0",
|
|
"@tiptap/react": "^3.5.0",
|
|
"@tiptap/starter-kit": "^3.5.0",
|
|
"dompurify": "^3.2.4",
|
|
"marked": "^18.0.4",
|
|
"mermaid": "^11.15.0",
|
|
"react": "^19.2.6",
|
|
"react-dom": "^19.2.6",
|
|
"react-router-dom": "^7.2.0"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^6.6.0",
|
|
"@testing-library/react": "^16.1.0",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"jsdom": "^25.0.0",
|
|
"vite": "^8.0.12",
|
|
"vitest": "^3.0.0"
|
|
}
|
|
}
|