Clarify that `type="messages"` parameter does NOT exist in Gradio 6.0.1:
- Gradio 4.x/5.x had `type="messages"` or `type="tuples"`
- Gradio 6.0.0 REMOVED tuples format entirely (per changelog)
- In 6.0.1, messages format is the ONLY format - no param needed
Added source verification command and reference to changelog.
SPEC-23 is now fully implemented:
- show_progress="full" β
- fill_height=True β
- autoscroll=True β
- Messages format β (default in 6.0.1 - no type= param needed)
Key finding: Gradio 6.0.1 uses OpenAI-style message format by
default. The `type="messages"` parameter referenced in some docs
does not exist in 6.0.1 - the legacy tuple format was removed.
Updated SPEC-23 documentation to reflect the actual implementation.
- Fix research_agent param types: str | None (Gradio can pass None)
- Add structlog logging for errors instead of exposing raw exceptions
- Update SPEC-22: mark as IMPLEMENTED, remove hardcoded line numbers
- Widen grep scope to match "no gr.Progress in codebase" criterion
docs: Add Gradio architecture clarification to SPEC-23β
- Delete several obsolete documents, including `design-patterns.md`, `HF_FREE_TIER_ANALYSIS.md`, `overview.md`, `deployment.md`, and `workflow-diagrams.md`, as they no longer align with the current project structure and objectives.
- This cleanup enhances the clarity and relevance of the documentation for developers and stakeholders.
docs: Add tech debt specs and architecture documentationβ
Adds comprehensive documentation for phased bug fixes:
- SPEC-20: PubMed JSON Parsing Fix (P2)
- SPEC-21: Middleware Architecture Refactor (P2)
- SPEC-22: Progress Bar Removal (P3)
Also adds:
- docs/specs/README.md - Master index with implementation order
- docs/bugs/p2-hardening-issues.md - P2 issue tracker
- docs/bugs/p3-ms-framework-gaps.md - MS framework gap analysis
- docs/architecture/adr-001-middleware-refactor.md - ADR for middleware
- docs/architecture/ms-framework-usage-report.md - What we use from MS
- Introduce a new document detailing Phase 16: PubMed Full-Text Retrieval, outlining its objectives, prerequisites, success criteria, and implementation notes.
- This phase aims to enhance evidence quality by enabling full-text retrieval from PubMed, including structured sections and search integration.
- The document serves as a comprehensive guide for developers and stakeholders involved in the implementation of this feature.
docs: Archive completed SPEC-18 and P0/P2 bug documentationβ
* fix(deps): Upgrade agent-framework-core to 1.0.0b251204 (SPEC-18)
Breaking API changes in upstream require event class migration:
- MagenticAgentDeltaEvent β AgentRunUpdateEvent
- MagenticAgentMessageEvent β ExecutorCompletedEvent
- MagenticFinalResultEvent β (removed, use WorkflowOutputEvent)
Upstream fixed the repr bug we worked around in SPEC-17.
Keep Accumulator Pattern as safety net for now.
Closes P0: HuggingFace Spaces deployment blocked
* docs: Add SPEC-18 documentation and fix test docstring
- Add docs/specs/SPEC_18_AGENT_FRAMEWORK_UPGRADE.md with full migration guide
- Update test_accumulator_pattern.py docstring to reference new event classes
Part of SPEC-18: Agent Framework Core Upgrade
* refactor: Address CodeRabbit review feedback
- Use defensive getattr for event.data.text (consistency)
- Remove redundant isinstance check in _handle_final_event
- Update sync dates in requirements.txt and workflow-diagrams.md
- Add language specifier to SPEC-18 code block
Note:β¦
docs: Archive SPEC_ARCHITECTURAL_DEBT and P3 tech debt docsβ
- Extract magic number 45 to class constant _EST_SECONDS_PER_ROUND (advanced.py)
- Add @pytest.mark.unit to test_advanced_p2_dead_zones.py
- Remove debug print statements from test
- Add pytestmark = pytest.mark.unit to test_magentic_judge_termination.py
- Fix import ordering (stdlib before third-party)
- Add fallback p=0.15 for progress events without iteration (app.py)
- Refactor max_iters lookup with getattr chains to reduce statement count
- Fix SPEC_16 markdown: list spacing (1. vs 1. ) and code block languages
All 327 tests pass.
docs: SPEC_16 verified and corrected against codebaseβ
- P2 dead zones: Mark Phase 1 complete (granular init events)
- SPEC-15: Mark as IMPLEMENTED with all acceptance criteria checked
- ACTIVE_BUGS.md: Update P2 status and timestamp
docs: Update SPEC_16 with namespace neutrality and Gemini strategy
MOVED to proper locations:
- SPEC_12_NARRATIVE_SYNTHESIS.md β docs/specs/
- BRAINSTORM_EMBEDDINGS_META.md β docs/brainstorming/
KEPT in root (per project convention):
- TOOL_ANALYSIS_CRITICAL.md
- CLAUDE.md, AGENTS.md, GEMINI.md, README.md
NEW bug report:
- P1_NARRATIVE_SYNTHESIS_FALLBACK.md - Documents why SPEC_12's LLM
synthesis silently falls back to template output. Root cause is
exception handling that catches all errors without user feedback.
LLM synthesis works locally with API keys; HF deployment needs secrets.
Updated ACTIVE_BUGS.md index with new P1 bug.
feat(SPEC_12): implement narrative report synthesis using LLMβ
This commit introduces the `SynthesisAgent` for generating narrative research reports from structured data, addressing the issue of outputting synthesized prose instead of structured metadata. Key changes include:
- Creation of `SynthesisAgent` in `src/agents/synthesis.py` for LLM-based synthesis.
- Addition of synthesis prompts and a few-shot example in `src/prompts/synthesis.py`.
- Modification of the orchestrator to call the new `SynthesisAgent` for report generation.
- Implementation of tests to ensure narrative output structure and reference accuracy.
This enhancement aligns with the project's focus on sexual health research and improves the quality of report generation.
Closes #85, #86.
feat(SPEC_11): finalize transition to Sexual Health Research Specialistβ
This commit completes the transition of DeepBoner to a dedicated Sexual Health Research Agent by removing all references to "general" and "drug repurposing" domains. Key changes include:
- Updated domain defaults to exclusively use "sexual_health".
- Replaced all example queries and documentation to reflect a focus on sexual health topics.
- Removed any lingering references to non-sexual health concepts in code and tests.
- Ensured all tests are aligned with the new domain focus, passing successfully.
This change reinforces the project's identity and simplifies the codebase, enhancing clarity and usability for users focused on sexual health research.
Closes #89.
docs: add SPEC_12 for narrative report synthesisβ
BREAKING CHANGE: Remove GENERAL and DRUG_REPURPOSING domains
DeepBoner is now a focused Sexual Health Research Specialist, not a
general-purpose research agent.
Changes:
- Remove ResearchDomain.GENERAL and ResearchDomain.DRUG_REPURPOSING
- Remove GENERAL_CONFIG and DRUG_REPURPOSING_CONFIG from domain.py
- Set DEFAULT_DOMAIN = ResearchDomain.SEXUAL_HEALTH
- Update Gradio examples (remove Metformin/Alzheimer's)
- New example: "Testosterone therapy for hypoactive sexual desire disorder?"
- Hide domain dropdown (only one option now)
- Update all domain-related tests
Closes #89
docs: SPEC_10 audit - add 16th location and test updatesβ
SPEC_08 documents the plan to integrate the structured memory layer
(built in SPEC_07 as "God Mode") into Simple and Advanced modes.
Key points:
- Memory should be a shared LAYER, not a separate MODE
- Extract ResearchMemory service from LangGraph nodes
- Wire into existing orchestrators
- Remove "God Mode" from UI post-integration
Also updates ACTIVE_BUGS.md to track this as P1 post-hackathon work.
Related: Issue #73, PR #72
NEW DOCS:
- SPEC_07_LANGGRAPH_MEMORY_ARCH.md: Ironclad spec for structured
cognitive memory using LangGraph (Nov 2025 best practices)
- P3_ARCHITECTURAL_GAP_STRUCTURED_MEMORY.md: Bug report documenting
missing hypothesis/conflict tracking in AdvancedOrchestrator
Based on deep codebase audit and web search (Nov 2025):
- LangGraph chosen over Mem0 for orchestration (Mem0 better for personalization)
- Works with HuggingFace Inference API (Llama 3.1) - no OpenAI required
- Includes SQLite checkpointer for dev, MongoDB for prod
UPDATED:
- ACTIVE_BUGS.md: Added P3 architecture gaps, marked P0 Simple Mode as FIXED
feat: add service loader + SPEC_06 + P0 bug reportβ
Service Loader:
- Create src/utils/service_loader.py for centralized lazy loading
- All orchestrators now use centralized service loading
- Enforces OrchestratorProtocol on Advanced and Hierarchical
SPEC_06 (Simple Mode Synthesis - not yet implemented):
- Research-backed spec for fixing Simple mode never synthesizing
- Identifies 6 root causes with November 2025 LLM-as-Judge research
- Separates scoring from decision-making (debiased architecture)
P0 Bug Report:
- Documents Simple mode producing only citations (no synthesis)
- Confidence dropping to 0% in late iterations (context overflow)
- Judge never recommending "synthesize" even with 455 sources
CodeRabbit concerns from PR #70 addressed.
docs: mark SPEC_03/04/05 as IMPLEMENTED with acceptance criteriaβ
SPEC_04: Magentic Mode UX Improvements (#68)
- P0: Chat history cleared on timeout (1-line fix)
- P1: Timeout too short (300s β 600s)
- P1: Timeout not configurable (add env var)
- P2: No graceful degradation (future)
SPEC_05: Orchestrator Module Cleanup (#67)
- Empty src/orchestrator/ folder should be deleted
- orchestrator_hierarchical.py is dead code (0% coverage)
- Option A (minimal cleanup) recommended for now
feat(tools): add OpenAlex integration with citation-based rankingβ
- Implemented OpenAlexTool in src/tools/openalex.py
- Added comprehensive unit and integration tests in tests/unit/tools/test_openalex.py
- Updated src/tools/__init__.py to export the new tool
- Updated SPEC_03 with final implementation details and test patterns
- Features: Citation count sorting, abstract reconstruction, concept tagging, OA links
- Verified with 100% test pass rate and clean lint/type checks
docs: add SPEC_03 for OpenAlex integration (TDD plan)β
Ironclad spec for adding OpenAlex as 4th data source:
Why OpenAlex:
- Citation counts (prioritize authoritative papers)
- Concept tagging (hierarchical classification)
- Open access links (direct PDF URLs)
- FREE API, 209M+ works indexed
Architecture:
- Implements SearchTool Protocol (DIP)
- Returns Evidence with rich metadata
- Follows existing tool patterns (SOLID/DRY)
TDD Plan:
- 10 unit tests covering all functionality
- Integration test with real API
- Tests written before implementation
Groundwork ready:
- SourceName already includes "openalex"
- Evidence.metadata designed for citation data
Closes #51 when implemented.
SPEC_02 (CRITICAL):
- Update code examples to match actual implementation
- Replace non-existent create_test_orchestrator() with real pattern
- Show actual pytest fixtures (mock_search_handler, mock_judge_handler)
- Change "Files to Create" β "Files Created"
orchestrator_magentic.py (nitpick):
- Make timeout configurable via constructor parameter
- timeout_seconds defaults to 300.0 (5 minutes)
All 149 tests passing.
docs: fix spec half-measures (line refs, test counts, acceptance criteria)β
SPEC_01:
- Line reference: 94 β 111 (actual location)
- Acceptance criteria: Mark all 4 items as done
SPEC_02:
- Test count: 140 β 141
- Test Matrix: Mark both modes as IMPLEMENTED
- Acceptance criteria: Mark 4/5 items as done
Previous agent claimed "updated" but left stale values.
feat: Implement SPEC_01 (Termination) and SPEC_02 (E2E Tests)β
- SPEC_01: Added timeout (300s) and progress events to MagenticOrchestrator
- SPEC_02: Created tests/e2e/ with mocked tests for Simple and Advanced modes
- Docs: Updated specs to match codebase state
docs: fix spec accuracy (line numbers and test counts)β
SPEC_01: Line reference 112 β 110 (actual location of .with_standard_manager)
SPEC_02: Test count 142 β 140 (verified with pytest --collect-only)
Both specs now match codebase exactly per audit verification.
docs: add specs for P0 termination fix and P1 E2E testingβ