v0.5.0 — Export to Markdown & PDF + Model Selection#7
Merged
msitarzewski merged 4 commits intomainfrom Feb 18, 2026
Merged
Conversation
Multi-user auth (JWT + RBAC), PostgreSQL support (asyncpg + connection pooling), Perplexity provider, Prometheus metrics, extended health checks, backup/restore CLI, per-user rate limiting, Playwright E2E tests, load tests, production deployment docs. 1354 Python tests + 12 load tests, ruff clean. Fix: create_all only for in-memory SQLite, file-based DBs use alembic exclusively. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Export command: --format pdf/markdown, --content full/decision,
--no-dissent, -o/--output. Decision-first markdown layout.
- PDF export with fpdf2: markdown-to-HTML rendering (bold, italic,
lists, code, headers), Unicode sanitization for core PDF fonts.
- API endpoint: GET /api/threads/{id}/export?format=pdf&content=full
- Web UI: ExportMenu component on thread detail page + live consensus.
Client-side markdown generation, server-side PDF via API.
- Consensus store: question field for export context.
- Model selection: --proposer, --challengers, --panel CLI flags,
proposer_eligible flag on ModelInfo, Perplexity challengers-only.
- Provider updates: claude-sonnet-4-6, updated catalogs.
- 1539 Python + 122 Vitest tests (1661 total), all passing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- rbac.py: add return type annotation to require_role() - google.py: fix _build_contents return type, suppress SDK type stub mismatch on generate_content contents arg Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contributions and votes from SQLAlchemy relationships have no guaranteed order across platforms. Use role/model-based lookup instead of positional index access. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
duh export <id> --format pdf/markdown --content full/decision --no-dissent -o file. Decision-first markdown layout, PDF with formatted markdown rendering (bold, italic, lists, code blocks).GET /api/threads/{id}/export?format=pdf&content=full&dissent=truereturns PDF StreamingResponse.--proposer,--challengers,--panelCLI flags + API fields.proposer_eligibleflag on ModelInfo. Perplexity set as challengers-only.Test plan
duh export <id> --format markdown— decision-first full reportduh export <id> --format markdown --content decision— decision onlyduh export <id> --format markdown --content decision --no-dissent— no dissentduh export <id> --format pdf -o out.pdf— valid PDF with formatted contentuv run pytest tests/ -q— 1539 passedcd web && npm run build && npm test— 122 passed🤖 Generated with Claude Code