Sessions/2026-04-14-session-log.md
Session Log — 2026-04-14
Duration: ~4 hours | Commit: a78f0cb
What We Built
1. Shared Browser Infrastructure
Created prism_platform/browser/ — 3-tier web fetch system: - Tier 1: httpx + Jina Reader (handles JS rendering). FULLY IMPLEMENTED. - Tier 2: Playwright stealth / Camoufox. STUBBED. - Tier 3: Browserless / ScrapingBee. STUBBED. - Bot-block detector catches Cloudflare, WAF, CAPTCHA, login walls
2. intel-company 3-Track Pipeline
Moved from single Perplexity call to 3-track architecture: - Track 1 WebFetch → Track 2 Perplexity → Track 3 Gemini synthesis - WebFetch always wins conflicts (live = more current) - Perplexity fills what WebFetch can't: competitors, industry, private financials - Single Perplexity call (not two) — sharper playbook v2.2.0
3. Pipeline Health Log
Every failure, fallback, degradation captured and surfaced in the output. No silent failures. HEALTHY/DEGRADED/FAILED status in report header.
4. Schema Expansions
Added social fields to CompanySeedOutput, CompetitorSeed, ExecutiveSeed. Migration 006 applied.
5. Database Live + Caching
Docker + PostgreSQL running. Both prospects seeded: - nike.com: HEALTHY, 5 execs, 6 competitors, cache HIT on repeat - orientaltrading.com: DEGRADED (no public leadership page), 5 execs, 6 competitors
Key Decisions Made
| Decision | Choice | Why |
|---|---|---|
| 2 Perplexity calls vs 1 | 1 sharper call | Apples-to-apples comparison in synthesis requires same fields from both tracks |
| Follow-up targeted LinkedIn call | Absorbed into main playbook | Why make it generic first then targeted? Just be targeted from the start |
| WebFetch vs Perplexity priority | WebFetch always wins | Live page > indexed knowledge |
| Synthesis LLM | Gemini Flash Lite | Cheap, fast, no web search needed — just reconciliation |
| Gemini model | gemini-3.1-flash-lite-preview | User direction — updated from gemini-2.0-flash |
| Silent failures | Prohibited | Pipeline health log captures everything |
| Caching | module_executions (permanent) | Zero cost on repeat runs; 180-day TTL |
What Remains
- activities.py: wire Track 3 in (Temporal production path)
- Tests: unit + integration (all missing)
- UI: company identity card
Interaction Notes
- Arijit explicitly valued deep thinking-partner engagement, not just coding
- Pushed back on overcomplicating (2 Perplexity calls → 1; 2a/2b tracks → just improve Track 2)
- Key questions asked: "Why are we doing X?" often led to simplifications