tab_tender.py: add × button per criterion (columns layout, one per row).
Clicking removes that criterion from session_state and reruns — evaluation
will only run against the remaining criteria.
tab_bidders.py: wrap all criteria rows in st.expander("View all N criteria").
Bidder card header (name, overall verdict, pass/total) always visible when
collapsed; all criterion rows appear on expand.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Dark/light mode compatibility: replace hardcoded colors with CSS vars and rgba
All HTML components now use:
- var(--text-color) for all text (adapts to Streamlit theme)
- var(--secondary-background-color) for card backgrounds
- rgba(r,g,b,0.08-0.15) tints for verdict/category badge backgrounds
- rgba(128,128,128,0.1-0.2) for borders and dividers
- Vibrant accent colors (#22C55E #EF4444 #F59E0B #3B82F6) for verdict states
Removed base="light" from config.toml so dark mode works properly.
Fixed duplicate key in config.toml.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- core/vectorstore.py: switch to EphemeralClient (in-memory) — eliminates
ChromaDB 0.5.x tenant/SQLite compatibility error entirely; index rebuilds
on each evaluation run so persistence is not needed
- data/tender/real_tenders/: two real CRPF tender PDFs downloaded from
crpf.gov.in (Bhopal water tanks NIT-71 Aug-2025, J&K office repair Jan-2026)
- ui/tab_tender.py: pre-loaded tender selector with tabs (pre-loaded vs upload);
real tenders shown with green badge; active tender name always displayed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
UI revamp: inline styles throughout, Inter font, reliable badge system
Root cause of previous bad UI: CSS class selectors (.tiq-badge etc.) defined
in the global style block don't reliably cascade into Streamlit markdown
containers. Fix: 100% inline styles on every HTML component — no CSS classes.
- ui/styles.py: simplified to page-chrome only (sidebar, tabs, buttons,
metrics) — nothing that requires class inheritance
- ui/components.py: verdict_pill/category_badge/ocr_tier_badge/confidence_bar
all use pure inline styles; color-coded confidence bar (green/amber/red)
- ui/tab_overview.py: hero banner, numbered pipeline stage cards, stat_card KPIs
- ui/tab_bidders.py: CSS grid verdict table, bidder header with pass/total,
styled reason/snippet callout boxes, clean dividers
- ui/tab_review.py: amber summary banner, styled evidence cards, clean layout
- ui/tab_interpretability.py: coloured verdict status cards, inline source
citation chip, styled Q&A answer box
- app.py: glowing connection dot, cleaner sidebar branding, Inter font via
Google Fonts …
Final sweep: beautiful UI, pitch deck, HF README, ARCHITECTURE.md
Implements specs/07_criteria_extractor.md. extract_criteria calls DeepSeek
with the full tender text and parses Criterion objects; falls back to
hardcoded precomputed criteria on LLMUnavailable. audit.py writes to SQLite;
fallback.py loads precomputed JSON or hardcoded defaults. Tab 2 renders
criteria cards with category/mandatory badges and rule details.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Step 1: project skeleton — all stubs, directory structure, and entry point
Creates every file listed in specs/00_skeleton.md: app.py with 5-tab Streamlit
shell, all core/ and ui/ stubs importable without logic, data/scripts/assets
directory tree, requirements.txt, packages.txt, .env.example.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>