Algolia-Central

Documentation/10-Known-Issues.md

10 — Known Issues (F-001 to F-039)

Last updated: 2026-04-17. Authoritative source: rc3-phoenix/testing/Detailed-Audit-Finding-Record.md.

Cross-reference of every finding from Phase 4 audit. One line per issue + link to the doc area. Full rationale + fix detail lives in the testing record.


P0 Blockers (Step 3 gate — must ship before any demo)

F# Severity Title Area Chapter
F-038 P0 Specialist stream NOT audited for hallucination (Al-Futtaim, PcComponentes fabrications) Audit 08-Audit-Pipeline
F-032 P0 "Namedrop: Gymshark" prompt instruction echoed verbatim in UI Prompts 05-Prompts-Reference
F-031 HIGH Link label "... \| Algolia \| Algolia" double-suffix Audit 08-Audit-Pipeline
F-026 CRITICAL Signal state machine doesn't accept user corrections Orchestrator 04-Functions-Reference · 09-Session-State
F-035 MEDIUM Qualification too slow (5 turns, 8 signals) Discovery 04-Functions-Reference

Step 4 (performance + quality)

F# Severity Title Area
F-001 signal_extract runs serially with retrieval (P-1) Orchestrator
F-002 System prompt 16KB, could trim 50% (P-4) Prompts
F-003 Maverick post-stream gap ~390ms vs Elena 44ms (P-6) Stream processor
F-006 BUG Prompt size non-monotonic spike (16K → 157K → 43K) Prompts
F-007 Meta queries trigger full retrieval (P-2) Retrieval
F-008 Pushback queries waste retrieval Retrieval
F-010 Classification queries skip optimization Retrieval
F-011 Dossier frozen at 213 chars — signals not persisted? Session state
F-015 Handoff detection adds 303ms post-stream (P-5) Stream processor
F-023 Specialist final_event_emitted 644ms (P-7) Metadata manager
F-033 HIGH Same customer namedropped 3× per session Prompts · Session state
F-034 HIGH Maverick ignores user follow-up answers Prompts
F-036 MEDIUM Concept repetition across turns Prompts
F-039 HIGH Stale blog content (2022–2024) surfaced in 2026 Retrieval

Step 5 (cleanup / collapse duplications)

F# Severity Title Area
F-027 HIGH Handoff = silent zombie prevention, no warm transfer Stream processor
F-028 HIGH Response is generic corporate slop Prompts
(Section 3) Dual consent/normal flow in api-src/search.ts API
(Section 3) 3-layer handoff routing (regex → keyword → override) Orchestrator
(Section 3) Triple-pass discovery questions Orchestrator
(Section 3) Hardcoded persona source filters in orchestrator Retrieval

Step 6 (persona enforcement)

F# Severity Title Area
F-029 HIGH checkPersonaCompliance() was theater — no enforcement Persona loader
(Section 3.6) Triple parsePersona functions Persona loader
(Section 1) Forbidden phrase lists never enforced Persona loader

Step 7 (frontend)

F# Severity Title Area
(P-9) 3 separate message update cycles per turn Hooks
(Section 3.8) Duplicated SSE handlers between useChatStream + useSpecialist Hooks

Out of Scope (separate efforts)

F# Severity Title Reason
F-022 HIGH Elena execute takes 33s Agent Studio side, not our code
F-030 12 pre-existing test drift failures Pre-existing, not caused by Steps 1–2
F-037 LOW Elena handshake summary is paragraph, should be bullets Agent Studio prompt edit (out of code audit scope)

Completed (Steps 1–2)

Step Title Outcome
Step 1 Delete 6 verified dead code items ~290 lines removed, TSC clean
Step 2 Collapse audit pipeline + enable HEAD checks ~750 lines removed, enableHealthChecks=true

Change log (as fixes ship)

Date Finding(s) Commit Validation
2026-04-17 F-001..F-030 captured (not yet committed — Steps 1+2 working tree)
2026-04-17 F-031..F-037 captured logged to Phase-4-Execution-Map §9
2026-04-17 F-038 captured (Al-Futtaim fabrication) logged
2026-04-17 F-038 strengthened (PcComponentes unlinked) logged
2026-04-17 F-039 captured (stale blogs) logged
2026-04-17 F-031 FIXnormalizeLinkLabelSuffix() in audit.ts; wired into InlineStreamAuditor Step 3 working tree 10 tests in auditor-label-suffix.test.ts pass
2026-04-17 F-032 FIX — PERSONAS.md line 33 NAMEDROP label renamed to behavioral prose; defensive scrubber stripPromptInstructionLeaks() in audit.ts Step 3 working tree 10 tests in auditor-namedrop-scrubber.test.ts pass
2026-04-17 F-035 FIX — relaxed qualification thresholds in discovery_analyzer.ts: early path (6 signals + turn ≥ 2 + pain) + near-saturation (7 of 8) + standard (turn ≥ 3 was 4) Step 3 working tree 9 tests in discovery-qualification.test.ts pass; 1 pre-existing discovery-bypass test updated
2026-04-17 F-026 FIX — new lib/search/pushback_detector.ts; wired into orchestrator.igniteMaverick BEFORE signal_extract to null contradicted fields Step 3 working tree 12 tests in pushback-detector.test.ts pass
2026-04-17 F-038 FIXvalidateCustomerClaim() in audit.ts; wired into InlineStreamAuditor.auditGrounding; InlineStreamAuditor instantiated in adaptAgentStudioStream for specialist audit Step 3 working tree 10 tests in auditor-customer-claim.test.ts pass
2026-04-17 F-040 FIX — classifyLink Q3 tightened to exact root path; Q4 requires URL in curated TECHNICAL_FALLBACK_URL_MAP Step 3.5 working tree 9 tests in auditor-path-tightening.test.ts pass, incl. exact Shopify 404 case
2026-04-17 F-041 REVERTED — qualification short-circuit was misguided. Stripping Maverick's value was wrong. Real root causes = F-044 (retrieval context) + F-029 (persona enforcement). Step 3.5 working tree code reverted, flow restored
2026-04-17 F-042 FIX — history filter at Gemini chat boundary drops leading non-user messages Step 3.5 working tree TSC clean; will validate in next live run
2026-04-17 Q3 ANSWEREDsignalResult.filters is Maverick-only architecture-drift override; specialists never consume it. Vestigial for case_study/policy/news, harmful for doc on chip turns. Decision: remove override, keep field for telemetry. Full trace in rc3-phoenix/testing/Q3-Brain-Filter-Investigation.md. Step 3.6 investigation N/A — investigation only
2026-04-17 F-044 FIX — new lib/search/retrieval_context.ts with shouldInheritContext + buildAccumulatedQuery. Wired into orchestrator.igniteMaverick before retrieval. Removed signalResult.filters override (Q3 decision). Removed .slice(-6) history truncation in signal_extractor.ts. Added SHORT-TURN RULE to prompts/brain.ts STEP 2. Step 3.6 working tree 11 tests in retrieval-context-inheritance.test.ts pass; TSC clean
2026-04-17 F-045 FIX (write path) — extended SessionState with conversation_turns: ConversationTurn[]. Added appendTurnsPure + appendConversationTurns helpers in redis.ts. Wired into orchestrator.igniteMaverick after turn_count bump and into orchestrator.igniteSpecialist before final event. Readers still use frontend-passed history (incremental migration). Step 3.6 working tree 10 tests in redis-conversation-turns.test.ts pass; TSC clean
2026-04-17 F-029 PARTIAL FIX (advisory gate) — new validateMaverickVoice() in persona_loader.ts with real voice markers (code-block ban, doc-bot opener regex, word count bounds, substantive-only requirement for algolia.com link + customer/product anchor). Wired into stream_processor as logging + [F-029 VOICE] audit_trace emission. Regeneration NOT wired — per SESSION.md brief, prompt trimming is forbidden and regen UX needs user review. Activation deferred. Step 3.6 working tree 11 tests in persona-voice-gate.test.ts pass; TSC clean
2026-04-17 F-046 FIX — Add-More-Context was routing to Maverick's sendMessage (re-qualifying + second handoff). Extracted pure buildSpecialistRequestBody in src/hooks/chat/specialist_request.ts. Extended triggerSpecialist/onSpecialistTrigger with optional additionalContext param. ChatMessage.tsx:412 now routes onAddContext through the specialist execute path with consent=true + inserts a user bubble. Step 3.7 working tree 8 tests in specialist_request.test.ts pass; TSC clean
2026-04-17 F-047 FIX — new validateQuoteAttribution in audit.ts catches unsourced quote+attribution blocks (em-dash pattern) that F-038 missed because quotes lack metric tokens. Paragraph-level pass in content_auditor.auditGrounding emits [AUDIT] STRIP QUOTE for fabricated "VP of E-commerce, Global Retailer"-style attributions. Accept paths: quote text present in sources OR algolia.com/customers blog/ link in block. Step 3.7 working tree
2026-04-17 F-048 FIXextractCandidateCompanyNames was stripping legitimate sentences because common capitalized words ("English", "French", "Price Range", "Okay") matched the candidate regex. Added NON_COMPANY_DENYLIST (languages, regions, bullet labels), extended stop-word guard with interjections/discourse markers, and added bold-header-colon skip (pattern: **Label**: never flags). F-038 primary guardrail preserved. Step 3.7 working tree 6 new false-positive tests pass; existing F-038 suite (10 tests) unchanged
2026-04-17 F-049 FIX — new reflowInlineNumberedList in lib/agent-studio/reflow.ts post-processes specialist paragraphs before emit, injecting \n\n before inline N. items (N=1-20) following sentence terminators. Wired into adaptAgentStudioStream.flushParagraphs. Elena's execution plans now render as actual markdown lists instead of one collapsed blob. Idempotent; preserves version strings like "API 2.0". Step 3.7 working tree 10 tests in reflow-numbered-lists.test.ts pass
2026-04-17 F-050 FIX — new detectVerbatimPaste + collapseVerbatimPaste in audit.ts. 6-word shingle-overlap detector against sources[].chunk_text. When a paragraph ≥ 200 chars overlaps ≥ 60% with a single chunk, replaces the block with {hook}. Full breakdown in [Title](url).. Wired as the first cleanup step in InlineStreamAuditor.auditParagraph. Fixes live regression where healthcare-SaaS user received a verbatim-copied Shopify ecommerce blog chunk. Step 3.8 working tree 9 tests in auditor-verbatim-paste.test.ts pass; TSC clean
2026-04-17 UX-01 — new SpecialistProgress.tsx mounts in SpecialistDeepDive when isLoading && !hasAnyContent. Shows live seconds counter + rotating step labels (Elena/Bruno-specific) + pulse dot while Agent Studio's 30-60s execute tool chain runs. Replaces the previous blank specialist panel during the verification-gate→first-chunk gap. Client-side only; no backend change. Step 3.8 working tree TSC clean; visual verification required
2026-04-17 F-051 FIX (wired)fixLinkBoundarySpacing in audit.ts wired into InlineStreamAuditor.auditParagraph (applies to Maverick + specialist paths via shared auditor). Inserts a space when markdown link ](url) is adjacent to alphanumeric. Resolves "ofdollars" / "boostrevenue" joined-word artifacts. Commit eb02e56b TSC clean
2026-04-17 F-052 FIX (wired)stripEmptyMarkdownHeadings in audit.ts wired into InlineStreamAuditor.auditParagraph. Removes ^#+\s*$ lines that would otherwise render as empty colored accent bars via MessageMarkdown's h2 renderer. Commit eb02e56b TSC clean
2026-04-17 UX-01 v2 (in-gate progress + auto-stop)InlineProgress added to VerificationGate.tsx so the progress bar shows where the user is already looking (no below-fold scroll problem). New specialistStreamingStarted flag computed in ChatPanel.tsx from messages[i+1].specialist.artifact.content.length > 0, plumbed through ChatMessageVerificationGate. When true, timer is replaced with a static "Response incoming — rendering below" line. Commit eb02e56b Live-verified timer stop
2026-04-17 UX-02 — Discovery Dossier click-to-expandEntityExtractionCard.tsx pill was cursor-default with no onClick and capped at 3 signals + +N overflow. Now a <button> with aria-expanded, chevron, and a popover panel (absolute right-0 mt-2 z-50) listing EVERY captured signal as a labeled <dl> (industry, pain, stack, etc.). Keyboard and screen-reader accessible. Commit eb02e56b Live-verified
2026-04-17 UX-03 — Specialist render fixesSpecialistDeepDive.tsx scrubber at line 291 no longer strips a leading ** without its closing pair (fixes "Tenancy**:" orphan-bold regression). Added hierarchy promotion pass: * **Label**: bullets with no trailing content are rewritten to #### Label for visual section grouping. New h4 renderer in MessageMarkdown.tsx with persona-accent color. Commit eb02e56b Live-verified
2026-04-17 UX-04 — CustomerQuote parses and auto-links attributionCustomerQuote.tsx now (a) parses explicit [Walgreens](https://...) markdown links in the attribution and renders as anchor tags instead of literal uppercase text, (b) falls back to an auto-link pass: if attribution ends in AT {Company} and sources include a /customers/<slug> matching the company, wraps the company name in a link to that URL. Sources are threaded from SpecialistDeepDive via specialist.sources || sources for both Elena and Bruno. Commit eb02e56b Live-verified for explicit links; auto-link needs next live run with Gymshark/Walgreens in sources

As each fix ships, add a row with: date, F#, commit hash/PR, brief validation outcome.


Cross-references

  • 00-README — start here
  • 02-Data-Flow — shows where each issue surfaces in the pipeline
  • 08-Audit-Pipeline — F-031, F-032, F-038 all live here
  • Authoritative detail: rc3-phoenix/testing/Detailed-Audit-Finding-Record.md
  • Execution plan: rc3-phoenix/testing/Phase-4-Execution-Map.md