[ { "id": "T001", "description": "getExperimentalFeatures() returns defaults (aiAssistant:false) when tenant settings are unavailable", "implemented": true, "featureIds": ["F001"] }, { "id": "T002", "description": "getExperimentalFeatures() returns saved experimental features from tenant_settings", "implemented": true, "featureIds": ["F001"] }, { "id": "T003", "description": "updateExperimentalFeatures() creates settings entry if none exists", "implemented": true, "featureIds": ["F002"] }, { "id": "T004", "description": "updateExperimentalFeatures() merges with existing settings without overwriting other keys", "implemented": true, "featureIds": ["F002"] }, { "id": "T005", "description": "updateExperimentalFeatures() requires settings:update permission", "implemented": true, "featureIds": ["F002"] }, { "id": "T006", "description": "isExperimentalFeatureEnabled() returns false for unknown feature keys", "implemented": true, "featureIds": ["F003"] }, { "id": "T007", "description": "isExperimentalFeatureEnabled('aiAssistant') returns false when not set", "implemented": true, "featureIds": ["F003", "F009"] }, { "id": "T008", "description": "isExperimentalFeatureEnabled('aiAssistant') returns true when enabled", "implemented": true, "featureIds": ["F003"] }, { "id": "T009", "description": "ExperimentalFeaturesSettings component renders list of features with toggles", "implemented": true, "featureIds": ["F004"] }, { "id": "T010", "description": "ExperimentalFeaturesSettings loads current settings on mount", "implemented": true, "featureIds": ["F004"] }, { "id": "T011", "description": "ExperimentalFeaturesSettings toggle updates local state", "implemented": true, "featureIds": ["F004", "F006"] }, { "id": "T012", "description": "Experimental Features tab appears in Settings navigation", "implemented": true, "featureIds": ["F005"] }, { "id": "T013", "description": "Experimental Features tab loads lazily", "implemented": true, "featureIds": ["F005"] }, { "id": "T014", "description": "AI Assistant feature shows name 'AI Assistant' and description", "implemented": true, "featureIds": ["F006"] }, { "id": "T015", "description": "AI Assistant toggle defaults to off", "implemented": true, "featureIds": ["F006", "F009"] }, { "id": "T016", "description": "Warning banner displays experimental features disclaimer", "implemented": true, "featureIds": ["F007"] }, { "id": "T017", "description": "Save button calls updateExperimentalFeatures() with current toggle states", "implemented": true, "featureIds": ["F008"] }, { "id": "T018", "description": "Save button shows success feedback after saving", "implemented": true, "featureIds": ["F008"] }, { "id": "T019", "description": "Quick Ask shortcut (⌘↑) is ignored when aiAssistant is disabled", "implemented": true, "featureIds": ["F010"] }, { "id": "T020", "description": "Quick Ask shortcut (⌘↑) works when aiAssistant is enabled", "implemented": true, "featureIds": ["F010"] }, { "id": "T021", "description": "QuickAskOverlay is not rendered when aiAssistant is disabled", "implemented": true, "featureIds": ["F011"] }, { "id": "T022", "description": "QuickAskOverlay is rendered when aiAssistant is enabled", "implemented": true, "featureIds": ["F011"] }, { "id": "T023", "description": "Sidebar Chat toggle (⌘L) is ignored when aiAssistant is disabled", "implemented": true, "featureIds": ["F012"] }, { "id": "T024", "description": "RightSidebar chat is hidden when aiAssistant is disabled", "implemented": true, "featureIds": ["F012"] }, { "id": "T025", "description": "Sidebar Chat works normally when aiAssistant is enabled", "implemented": true, "featureIds": ["F012"] }, { "id": "T026", "description": "/api/chat/v1/completions returns 403 when aiAssistant is disabled", "implemented": true, "featureIds": ["F013"] }, { "id": "T027", "description": "/api/chat/v1/completions returns 200 when aiAssistant is enabled", "implemented": true, "featureIds": ["F013"] }, { "id": "T028", "description": "/api/chat/v1/execute returns 403 when aiAssistant is disabled", "implemented": true, "featureIds": ["F014"] }, { "id": "T029", "description": "/api/chat/stream/* returns 403 when aiAssistant is disabled", "implemented": true, "featureIds": ["F015"] }, { "id": "T030", "description": "/api/chat/v1/completions/stream endpoint exists and accepts POST", "implemented": true, "featureIds": ["F016"] }, { "id": "T031", "description": "/api/chat/v1/completions/stream returns Content-Type: text/event-stream", "implemented": true, "featureIds": ["F016"] }, { "id": "T032", "description": "Streaming endpoint passes stream: true to OpenRouter API", "implemented": true, "featureIds": ["F017"] }, { "id": "T033", "description": "Streaming response chunks follow SSE format with data: prefix", "implemented": true, "featureIds": ["F018"] }, { "id": "T034", "description": "Each SSE chunk contains JSON with content and done fields", "implemented": true, "featureIds": ["F018"] }, { "id": "T035", "description": "Final SSE message has done: true", "implemented": true, "featureIds": ["F019"] }, { "id": "T036", "description": "Chat.tsx uses streaming endpoint for new messages", "implemented": true, "featureIds": ["F020"] }, { "id": "T037", "description": "Chat.tsx reads streaming response via getReader()", "implemented": true, "featureIds": ["F020"] }, { "id": "T038", "description": "Tokens are appended to message display as they arrive", "implemented": true, "featureIds": ["F021"] }, { "id": "T039", "description": "Message state updates incrementally during streaming", "implemented": true, "featureIds": ["F021"] }, { "id": "T040", "description": "Stop button triggers AbortController.abort() during streaming", "implemented": true, "featureIds": ["F022"] }, { "id": "T041", "description": "Aborting stream stops token display and ends generation state", "implemented": true, "featureIds": ["F022"] }, { "id": "T042", "description": "Streaming indicator is visible while receiving tokens", "implemented": true, "featureIds": ["F023"] }, { "id": "T043", "description": "Streaming indicator disappears when done: true received", "implemented": true, "featureIds": ["F023"] }, { "id": "T044", "description": "Network error during streaming shows partial response", "implemented": true, "featureIds": ["F024"] }, { "id": "T045", "description": "Stream interruption shows error indicator on message", "implemented": true, "featureIds": ["F024"] }, { "id": "T046", "description": "Assistant message is persisted after streaming completes successfully", "implemented": true, "featureIds": ["F025"] }, { "id": "T047", "description": "Persisted message content matches final streamed content", "implemented": true, "featureIds": ["F025"] }, { "id": "T048", "description": "Quick Ask expanded view streams responses", "implemented": true, "featureIds": ["F026"] }, { "id": "T049", "description": "Sidebar Chat streams responses", "implemented": true, "featureIds": ["F027"] }, { "id": "T050", "description": "Enabling AI Assistant allows Quick Ask usage after page reload", "implemented": true, "featureIds": ["F010", "F011"] }, { "id": "T051", "description": "Disabling AI Assistant prevents Quick Ask usage after page reload", "implemented": true, "featureIds": ["F010", "F011"] } ]