diff --git a/backend/plugins.py b/backend/plugins.py index 2bd2b65..c753a2b 100644 --- a/backend/plugins.py +++ b/backend/plugins.py @@ -308,7 +308,7 @@ async def execute_plugin(plugin_name: str, parent_node_id: str | None = None): await bus.publish("scene") return node.id - notifications.show(f'"{name}" node creation lands in R3/R5.', "info") + notifications.show(f'"{name}" node creation isn\'t available yet.', "info") await bus.publish("notification") return None diff --git a/backend/tests/test_plugins.py b/backend/tests/test_plugins.py index 75fe540..9db7cce 100644 --- a/backend/tests/test_plugins.py +++ b/backend/tests/test_plugins.py @@ -110,7 +110,7 @@ def test_execute_plugin_falls_through_to_the_generic_deferred_notice_for_an_unha assert result is None assert notifications.visible is True assert notifications.msg_type == "info" - assert notifications.message == '"Future Plugin" node creation lands in R3/R5.' + assert notifications.message == '"Future Plugin" node creation isn\'t available yet.' def test_execute_plugin_shows_warning_notification_for_unknown_plugin(): diff --git a/web_ui/src/app/canvas/ChatNodeView.test.tsx b/web_ui/src/app/canvas/ChatNodeView.test.tsx index 4f5342c..a6d6a27 100644 --- a/web_ui/src/app/canvas/ChatNodeView.test.tsx +++ b/web_ui/src/app/canvas/ChatNodeView.test.tsx @@ -100,7 +100,7 @@ describe("ChatNodeView", () => { for (const name of ["Generate Key Takeaway", "Generate Explainer Note"]) { const item = screen.getByRole("menuitem", { name }); expect(item).toBeDisabled(); - expect(item).toHaveAttribute("title", "AI generation lands in R4"); + expect(item).toHaveAttribute("title", "AI note generation isn't available yet"); } expect(screen.getByRole("menuitem", { name: "Generate Image" })).not.toBeDisabled(); expect(screen.getByRole("menuitem", { name: "Generate Chart" })).not.toBeDisabled(); diff --git a/web_ui/src/app/canvas/ChatNodeView.tsx b/web_ui/src/app/canvas/ChatNodeView.tsx index 0992748..08459c6 100644 --- a/web_ui/src/app/canvas/ChatNodeView.tsx +++ b/web_ui/src/app/canvas/ChatNodeView.tsx @@ -207,10 +207,10 @@ function ChatNodeMenu({ - - {/* R6.2: a real click-to-expand submenu (not disabled) - same diff --git a/web_ui/src/app/canvas/DocumentNodeView.test.tsx b/web_ui/src/app/canvas/DocumentNodeView.test.tsx index 247ae6f..a66f258 100644 --- a/web_ui/src/app/canvas/DocumentNodeView.test.tsx +++ b/web_ui/src/app/canvas/DocumentNodeView.test.tsx @@ -195,7 +195,7 @@ describe("DocumentNodeView", () => { const exportItem = screen.getByRole("menuitem", { name: "Export" }); expect(exportItem).toBeDisabled(); - expect(exportItem).toHaveAttribute("title", "Export lands in R6"); + expect(exportItem).toHaveAttribute("title", "Document export isn't available yet"); // filePath is empty -> Open File must be entirely absent, matching the // legacy menu's own conditional (only added when file_path is set). diff --git a/web_ui/src/app/canvas/DocumentNodeView.tsx b/web_ui/src/app/canvas/DocumentNodeView.tsx index 01f51b7..c563065 100644 --- a/web_ui/src/app/canvas/DocumentNodeView.tsx +++ b/web_ui/src/app/canvas/DocumentNodeView.tsx @@ -263,7 +263,7 @@ function DocumentNodeMenu({ )}
{isDocumentKind && ( - )} diff --git a/web_ui/src/app/canvas/HtmlNodeView.test.tsx b/web_ui/src/app/canvas/HtmlNodeView.test.tsx index 06404b3..dcb9406 100644 --- a/web_ui/src/app/canvas/HtmlNodeView.test.tsx +++ b/web_ui/src/app/canvas/HtmlNodeView.test.tsx @@ -178,7 +178,7 @@ describe("HtmlNodeView", () => { expect(popout).toBeDisabled(); expect(popout).toHaveAttribute( "title", - "Popout view isn't built yet - see the R3 plan doc for why a naive window.open() would be unsafe for untrusted HTML", + "Popout view isn't built yet - opening untrusted HTML in a separate window needs a security review first", ); await user.click(popout); // disabled - fires nothing diff --git a/web_ui/src/app/canvas/HtmlNodeView.tsx b/web_ui/src/app/canvas/HtmlNodeView.tsx index e30db56..152b8be 100644 --- a/web_ui/src/app/canvas/HtmlNodeView.tsx +++ b/web_ui/src/app/canvas/HtmlNodeView.tsx @@ -202,7 +202,7 @@ export function HtmlNodeView({ data, selected }: NodeProps) { type="button" className="html-node-header-btn" disabled - title="Popout view isn't built yet - see the R3 plan doc for why a naive window.open() would be unsafe for untrusted HTML" + title="Popout view isn't built yet - opening untrusted HTML in a separate window needs a security review first" > Popout diff --git a/web_ui/src/app/canvas/SceneCanvas.tsx b/web_ui/src/app/canvas/SceneCanvas.tsx index 9891e47..b8b0dd6 100644 --- a/web_ui/src/app/canvas/SceneCanvas.tsx +++ b/web_ui/src/app/canvas/SceneCanvas.tsx @@ -146,7 +146,7 @@ function PlaceholderNodeView({ data, selected }: NodeProps) { on bottom. */}
{data.title}
- {!collapsed &&
placeholder — real nodes land in R3
} + {!collapsed &&
Placeholder node
}
); diff --git a/web_ui/src/app/chrome/AppBar.tsx b/web_ui/src/app/chrome/AppBar.tsx index 0688c76..3cbbd62 100644 --- a/web_ui/src/app/chrome/AppBar.tsx +++ b/web_ui/src/app/chrome/AppBar.tsx @@ -116,7 +116,7 @@ export function AppBar({ store }: { store: SceneStore }) { value="Ollama (Local)" aria-label="Provider mode" disabled - title="Provider modes land in R4" + title="Switching provider modes isn't available yet" onChange={() => {}} > diff --git a/web_ui/src/app/chrome/Composer.test.tsx b/web_ui/src/app/chrome/Composer.test.tsx index 70d5646..5f718f2 100644 --- a/web_ui/src/app/chrome/Composer.test.tsx +++ b/web_ui/src/app/chrome/Composer.test.tsx @@ -69,7 +69,9 @@ describe("Composer", () => { ); expect(screen.getByLabelText("Send message")).toBeDisabled(); expect(screen.getByLabelText("Attach context")).toBeDisabled(); - expect(screen.getByTitle("Model/provider selection lands in R4")).toBeDisabled(); + expect( + screen.getByTitle("Model selection isn't available here yet - configure models in Settings"), + ).toBeDisabled(); }); it("Send is enabled once there's text, calls sceneStore.sendMessage, and clears the draft", async () => { diff --git a/web_ui/src/app/chrome/Composer.tsx b/web_ui/src/app/chrome/Composer.tsx index 1d836ae..5dc52db 100644 --- a/web_ui/src/app/chrome/Composer.tsx +++ b/web_ui/src/app/chrome/Composer.tsx @@ -95,7 +95,7 @@ export function Composer({ store, sceneStore }: { store: ComposerStore; sceneSto type="button" className="composer-icon-button" disabled - title="Attachments land in R4 (file-staging pipeline)" + title="Attachments aren't available yet" aria-label="Attach context" > @@ -119,7 +119,7 @@ export function Composer({ store, sceneStore }: { store: ComposerStore; sceneSto type="button" className="composer-control" disabled - title="Model/provider selection lands in R4" + title="Model selection isn't available here yet - configure models in Settings" > {composer.route.provider}