Ship log
Changelog
Every meaningful change across the monorepo — the orchestrator (engine), the desktop client, this site, and the workspace itself. Discovered automatically; adding a new app makes it appear here.
-
Naming the Gap Between Enrichment and Coverage
Yesterday's v0.0.10 run made a problem legible: 33 hand-curated URLs went into the writer, 7 came out cited in the prose, 26 sat untouched. The fix wanted to be a new agent, and the first instinct was to name it 'Citation Diversity Enricher' and slot it between the writer and the existing 'cite' node. Today's planning work landed somewhere different — the existing cite node runs upstream of the writer (not after), the new agent's job is genuinely orthogonal to enrichment, and the right name is Citation Coverage Promoter. No code shipped; a plan got corrected before it generated a confused agent.
-
URL Validation Grows a Body
For months MemoPop's citation validator quietly skipped its URL accessibility check on almost every citation — because a date-format warning was enough to disable it. Two small changes put it back online, and upgrade the underlying check from a HEAD-only 'did this URL respond' to a GET-with-body-sniff that catches soft-404s and paywall stubs the prior pass had been rubber-stamping as valid sources.
-
The Analyst Gets the Pencil
Three things shipped today that together put the human analyst back in the middle of the citation pipeline: URL-keyed validation so the validator finally sees every source (not just the 6 that survived a per-file numbering collision), a Sources.md codified-mode loader that lets the writer compose only from analyst-approved URLs, and a new aggregate_sources agent that halts the pipeline mid-run with a curated draft so the analyst can rank and prune before any prose gets written.
-
Open in Obsidian, Actually — Vault Detection and a Cleaner Deal Header
The 'Open in Obsidian' button was silently doing nothing. Turns out `open -a Obsidian /some/folder` is a no-op unless that folder *is* a vault — so we taught the app to walk up to the nearest `.obsidian/` and route through `obsidian://` URIs instead. While we were in there, the deal-workspace header that hosted that button got a long-overdue redesign.
-
MemoPop's splash speaks all three discovery protocols — llms.txt, sitemap.xml, robots.txt
The memopop-site splash now serves the same machine-readable discovery surface that landed in context-vigilance-kit over the past two days, ported with the adaptations memopop needs — two content collections instead of one, provenance via `from` instead of `source_repo_slug`, and no publish gate to mirror. LLM crawlers get `/llms.txt` + `/llms-full.txt`, search engines get `sitemap-index.xml` + `robots.txt`, and the head of every page carries explicit `rel="sitemap"` and `rel="alternate" type="text/markdown"` hints.
-
The Orchestrator Learns to Find a Team
A new Firecrawl-driven pipeline walks any organization's website, finds the team page, extracts a structured roster, and back-fills missing socials by name. Phase 2 of Team-and-People-Metadata-Ingestion ships.
-
Splash upgrade — three-mode theming, peer-walking discovery, context-v archive, and Pagefind
memopop-site catches up to the astro-knots/splash conventions that crystallized after this site was originally built. The marketing prose stays; everything underneath gets rebuilt around two-tier tokens, a three-mode (light · dark · vibrant) toggle, a monorepo-aware discovery layer that auto-surfaces new apps, a brand-new /context-v/ archive alongside /changelog/, build-time Pagefind search across both, and a custom MemoMark logo.
-
memopop-site Ships — GitHub Pages Live with a Submodule-Powered, Cross-Project Changelog Hub
From an empty Astro starter to a deployed splash page in a single session. Dark Lossless redesign, a click-to-expand GUI callout, and — the centerpiece — a permissive content-collection renderer that turns four scattered project-level changelogs into one unified timeline.
-
The Crew Shows Up — Live Character Indicators on the Run Panel
Six steam-punk character portraits — Financial-Analyst, Researcher, Writer, Editor, Fact-Checker, Scorecard-Generator — now sit above the JobView's 3-column grid during a memo run. The character whose stage is active glows with a slow breathing border; the rest stay visible but quiet. A live caption under the active character names the work in progress, swapping as the underlying milestones advance. The cast is authored in a single human-editable markdown file (`src/lib/characters.md`) — frontmatter holds names, stage mappings, default captions, and forward-compat agent-precise captions for v2. Mike retunes the wording without touching code.
-
The Story So Far — memopop-ai From Empty Bun Workspace to Live Desktop Client
First changelog at the monorepo level. Catching up the eight days that took memopop-native from `bun create tauri-app` to a fullscreen client driving the orchestrator's HTTP API end-to-end.
-
Brand Setup Lands — Paste a URL, Get a Populated Config
First post-memo onboarding step. Click 'Make this look like your firm →' in the JobView's success banner (or 'Brand setup →' in Settings), paste the firm's website URL, watch Claude tool-use its way through the homepage and a couple of linked pages, then review every field on a confirmation form before anything saves to disk. ~15s wall time, ~$0.05–0.15 per fetch via Haiku 4.5. Brand managers stay happy because every Claude guess — colors, fonts, logos, taglines — is editable with live swatches and logo previews before save. Output merges into io/{firm}/configs/brand-{firm}-config.yaml, deep-merging with the firm-creation scaffold so company.conventional_name is never clobbered.
-
Wire memopop-native to the FastAPI Sidecar — Tests, Rust Transport, Frontend SSE
End-to-end integration of the desktop client with the orchestrator's FastAPI sidecar across four phases: pytest coverage on the server, a Rust transport layer with lazy spawn and /healthz poll, a TypeScript Transport implementation with SSE event subscription, and a Generate flow that streams milestones live into the UI.
-
Milestones Out of the Logs, Files Into the Firm
The sidecar gains structured milestone events extracted from agent prints, and a missing scaffold step that was sending firm-scoped runs to legacy output/.
-
Hardened: Logs Land, Versions Bump, the Sidecar Heals Itself
First contact with the desktop client surfaced four ways the orchestrator-as-a-service could go sideways. All four are closed in this pass.
-
The Orchestrator Learns to Read a Website
A new brand_fetch module drives a Claude tool-use loop over a firm's homepage, and two endpoints expose it. The HTTP surface keeps growing; agents stay untouched.
-
The Orchestrator Got an HTTP Front Door
The investment memo orchestrator has been a 30-agent Python CLI for months — you type a company name, wait 15 to 45 minutes, and a fully cited 50-file deal memo lands in `output/`. It just works. Now it also speaks HTTP.
-
memopop-native Bootstrapped — Tauri 2 + Svelte 5 Inside the Bun Workspace
Stood up apps/memopop-native — a Tauri 2 desktop shell wrapping the investment-memo-orchestrator's CLIs — inside the existing memopop-ai Bun workspace. Verified prerequisites (Xcode CLI, Rust, Bun), updated Rust to current stable, scaffolded via bun create tauri-app with TypeScript + Svelte, brought the frontend stack to current within two safe waves (minor + coupled-major), added the four Tauri 2 plugins we'll need (shell, dialog, store, fs). Window opens, IPC works, baseline is clean.
-
Settings + Firm Picker — First End-to-End Through the Transport Layer
First real feature in memopop-native: a Settings screen that picks the orchestrator repo path and the active firm, persisted across launches. Beneath the small UI, this lands the architectural seam — a Transport interface, a LocalTransport implementation backed by a single Rust api_dispatch command, and the first route (GET /firms) wired end-to-end. Every future action and query rides on this same rail; the eventual swap to a hosted Python server is now ~1 day of frontend work, not a rewrite.
-
Full Onboarding Journey Lands — Outline Gallery, Firm Creation, Deal Capture
Built out the full onboarding user journey end-to-end against the Onboarding spec. Home view stops being Settings — it's now an outline gallery (or, on first launch, a single Browse-for-orchestrator panel). New users see comprehensive sample outlines first (the value), and only get charged onboarding taxes when they click 'Try this on a company →'. Firm creation is a small modal that snake_cases the input, scaffolds io/{slug}/configs/brand-{slug}-config.yaml with company.conventional_name only, and idempotently appends /io/*/ to the orchestrator's .gitignore. Deal capture (URL, optional name, deck, mode) collects inputs and confirms — the actual memo-generation runner is the next spec. New backend routes: GET /outlines, GET /outlines/{id}, POST /actions/create-firm. Auto mode session, no testing run yet.
-
Interactive Terminal Application with Rich Framework
New guided CLI application that walks users through memo generation, export, and iteration without requiring knowledge of individual commands, flags, or file paths.
-
Assure Proper Integration of Table of Contents
The Table of Contents was consistently missing from final memo output despite the `toc_generator` agent running successfully mid-pipeline. Two separate ordering bugs caused the TOC to either never generate or get destroyed before finalization.
-
Assure Consistent Workflow and Codify Docs — Fact-Check Pipeline & Source Catalog
Introduces a three-step LLM-powered fact-check pipeline (extract → verify → correct) and a per-section comprehensive source catalog. The mechanical-only fact-checker is upgraded to use Perplexity Sonar Pro for independent claim verification and Claude for surgical corrections.
-
Assure Disambiguation During Research
Strengthens entity disambiguation to prevent research agents from conflating similarly-named organizations. Adds both improved prompt language and a mechanical post-synthesis override that forces correct company identity regardless of what the LLM returns.
-
Enforce Correct Citation Spacing with Mechanical Agent
New pipeline agent that mechanically enforces correct markdown citation spacing — no LLM, pure regex. Fixes the recurring problem of clumped, duplicated, and improperly spaced citations that affect Obsidian rendering, HTML/PDF exports, and readability.
-
Introducing the One-Pager Generator
New pipeline agent and standalone CLI tool that distills the full investment memo into a single-page visual summary. Serves as both a standalone deal teaser and a cover sheet for the full memo export.
-
Centralize Final Draft Path Logic & Bump Prefix to 7
Consolidated all final draft file resolution into `src/final_draft.py` and bumped the canonical prefix from `6` to `7`. Previously, three agents each had their own inline glob logic to locate the final draft — now they all call shared utility functions.
-
Table Generator CLI Tool
New standalone CLI for running the table generator agent outside the full pipeline. Scans memo sections and structured state data for tabular data opportunities, generates markdown tables, and inserts them into section files.
-
Deck Slide Classification & Placement Overhaul
Rewrote the deck screenshot classification, naming, and injection system to fix two core problems: (1) Claude Vision was misclassifying slides because it only had 7 vague categories to choose from, and (2) the injection agent was spamming sections with duplicate, poorly-placed im…
-
Competitive Landscape Research & Evaluation System (Initial Implementation)
Two new agents that discover, evaluate, and classify competitors using Perplexity Sonar Pro. The system splits competitive analysis into two phases with opposing cognitive biases: the researcher uses **completion bias** to find as many candidates as possible, while the evaluator…
-
New Module: Research PDF Scraper
A complete standalone module for parsing market research PDFs (McKinsey, CB Insights, PitchBook, Gartner, etc.) into markdown with properly formatted Obsidian-style citations.
-
Citation Pipeline Fixes: Alphanumeric Key Support & Duplicate Section Prevention
Fixes to the citation pipeline addressing two critical issues: (1) the writer agent's regex only matched numeric citation keys (`[^1]`) and missed alphanumeric keys (`[^deck]`), causing citation loss during polishing; and (2) the citation enrichment agent was appending duplicate…
-
Monorepo Foundation: Scaffold memopop-ai with Astro Site and SvelteKit App
Established the production-grade memopop-ai monorepo with Bun workspaces, Astro marketing site, SvelteKit web app skeleton, and shared Tailwind configuration.
-
Citation Pipeline Fixes: Definition Preservation & Duplicate Key Handling
Critical fixes to the citation pipeline that were causing citation definitions (the source references at the bottom of files) to be lost during processing.
-
Fix: 12Ps Scorecard Section Excuses in Final Draft
This release fixes an issue where the 12Ps Scorecard Summary section (section 08) would contain LLM "excuses" instead of actual scorecard data.
-
Refactor: Centralized Final Draft Module & Artifact Renumbering
This release refactors final draft operations into a single centralized module (`src/final_draft.py`) and updates the artifact numbering scheme.
-
Fix: Resume Workflow Uses Wrong Paths for Firm-Scoped IO
When resuming a workflow with `cli/resume_from_interruption.py` for firm-scoped deals, the writer agent would use legacy `output/` paths instead of firm-scoped `io/{firm}/deals/{deal}/outputs/` paths.
-
Dimension-Grouped Questions for 12Ps Framework
Fixed a critical issue where Perplexity was returning garbage/meta-commentary for non-standard section names like "Opening" and "Organization" in the 12Ps outline.
-
Scorecard Integration into Workflow
This release adds automatic 12Ps scorecard integration to the memo workflow. Previously, the scorecard evaluator generated detailed scores in `5-scorecard/12Ps-scorecard.
-
Disambiguation Exclusion List: Explicit Wrong-Entity Filtering
This release adds explicit wrong-entity exclusion to the disambiguation system. Deal configurations can now specify a `disambiguation` array of URLs/domains that belong to **different companies** with similar names.
-
Firm-Scoped IO System: Complete Implementation
This release completes the firm-scoped IO system, enabling private, firm-specific configurations, inputs, outputs, and exports. The system allows each firm (e.g.
-
Summary
Added a comprehensive scorecard evaluation system that scores completed investment memos against a structured 12-dimension framework (12Ps: Persona, Pain, Proposition, Problem, Possibility, Positioning, People, Process, Product, Potential, Progress, Plan).
-
Summary
Began major refactor to reorganize the flat `data/` and `output/` directories into a hierarchical `io/` directory organized by firm and deal. This enables private git submodules for firm-specific data while keeping the orchestrator open-source.
-
Summary
Completed the firm-scoped IO path resolution system, enabling deals to be stored in `io/{firm}/deals/{deal}/` with automatic fallback to the legacy `data/` and `output/` directories. All agents now pass the `firm` parameter through the workflow.
-
CLI Utilities for Fund and Company Memos
Added a focused set of CLI tools to tighten the memo workflow end-to-end:
-
Entity Disambiguation System Implementation
---
-
Canonical Draft Assembly Tool
---
-
Standalone CLI Tools for Post-Generation Enrichment & Evaluation
---
-
Summary
Added explicit "Venture Capital mindset" framing to all memo-writing agent prompts to ensure generated content focuses on opportunity and upside rather than defaulting to Private Equity-style skepticism.
-
Emerging Manager Outline with Proprietary Scorecard Vocabulary
Created a comprehensive outline for evaluating LP commitments to emerging manager VC funds, integrating Hypernova Capital's proprietary 12-dimension GP evaluation framework directly into the memo generation system.
-
Scorecard Agent & CLI Implementation
Implemented the Scorecard Agent and CLI tool to automatically generate Hypernova Capital's 12-dimension scorecards for emerging manager fund commitment memos. This completes the scorecard system introduced in changelog 2025-11-27_01.
-
Dataroom Analyzer Agent System & Export Improvements
Introduced a new multi-agent dataroom analyzer system for processing investment datarooms, plus improvements to trademark handling and export versioning.
-
Competitive Extractor & Separated Artifact System
Implemented Phase 2 of the Dataroom Analyzer: the Competitive Extractor. This extracts and synthesizes competitive landscape data from battlecard PDFs and outputs structured analysis as separate, numbered artifact files for better manageability.
-
Cap Table & Financial Extractors
Added two new extractors to the Dataroom Analyzer: Cap Table Extractor and Financial Extractor. These complete the core Phase 2 extractors for investment dataroom analysis.
-
Traction Extractor
Added the Traction Extractor to complete Phase 2 extractors (4 of 5). This extractor pulls customer metrics, revenue data, pipeline information, and partnerships from pitch decks and other traction-related documents.
-
Team Extractor - Phase 2 Complete!
Added the Team Extractor, completing all Phase 2 extractors (5/5). The dataroom analyzer now extracts comprehensive structured data from investment datarooms.
-
Table of Contents Generator Agent
Added a new TOC Generator agent that automatically creates a Table of Contents with working anchor links for the final investment memo. The TOC includes main sections (h2) and subsections (h3) that function in both HTML and PDF exports.
-
Phase 3: Data Synthesis & Cross-Reference
Added the Synthesizer module to cross-reference data across all extractors, detect conflicts, identify data gaps, and generate a unified view of company metrics with confidence scores.
-
Project Restructuring: CLI, Tools, and Scripts Organization
Major refactoring to organize 38 scattered Python files and shell scripts into logical directories, improving developer experience and project maintainability.
-
Resume Workflow Implementation
Implemented checkpoint-based resume functionality to recover from workflow interruptions without losing progress or re-running expensive API calls. System now detects completed agents from saved artifacts and resumes execution from the last successful checkpoint.
-
PDF Export Quality & Branding Improvements
Enhanced PDF export quality with proper logo rendering, Unicode symbol support, and GHCP Partners brand configuration. Fixed critical rendering issues that caused logo distortion and citation symbols to display incorrectly in WeasyPrint-generated PDFs.
-
Tier 1 Anti-Hallucination System: Prompt Engineering Fixes
Implemented comprehensive prompt engineering fixes to eliminate LLM fabrication of pricing, revenue, traction, and financial metrics in investment memos.
-
Perplexity Premium Sources Integration: @Syntax Quality Control
Integrated Perplexity's `@source` syntax into the research workflow to ensure high-quality data from premium sources like @crunchbase, @pitchbook, @statista, and @cbinsights.
-
Tier 2 Anti-Hallucination: Fact-Checker Agent Implementation
Implemented the fact-checker agent to prevent hallucinated metrics and claims in investment memos. This agent verifies all factual claims against research sources, catching fabricated revenue figures, pricing data, customer counts, and other metrics before final memo assembly.
-
Image-Based PDF Support: Batch Processing with Claude Vision API
Complete implementation of image-based PDF deck analysis using Claude's Vision API with intelligent batch processing. This solves the recurring issue of Docsend-exported decks that contain only images with no extractable text.
-
Perplexity Citation Integration: Research-First Architecture
Complete integration of Perplexity Sonar Pro for section-specific research WITH citations as a core part of the memo generation pipeline. This fundamentally changes the architecture from "write then add citations" to "research with citations then polish.
-
Major Architecture Refactor: Section-by-Section Processing
Complete refactor of the enrichment pipeline to process memo sections individually rather than as a single monolithic document. This eliminates API timeout issues and enables proper citation management with Perplexity Sonar Pro.
-
Overview
Major architectural improvements to prevent API timeouts through section-by-section processing, plus comprehensive brand expansion with MaC VC assets and SVG logo support.
-
Overview
This session focused on building and refining a comprehensive export/conversion system for investment memos, enabling professional PDF generation with Hypernova Capital branding.
-
Multi-Brand Export System
Implemented a comprehensive multi-brand export system that allows managing and exporting memos for multiple VC firm clients from a single installation.
-
PDF Edge-to-Edge Backgrounds & Brand Config Reorganization
Solved a critical PDF rendering issue where page backgrounds didn't extend to all edges and content lacked proper per-page spacing. Discovered WeasyPrint's `@page background-color` property enables edge-to-edge colored backgrounds while maintaining proper content margins on every…
-
Obsidian-Style Citation Consolidation for HTML Exports
Implemented automatic citation consolidation in HTML exports to match Obsidian's footnote behavior. When Perplexity AI cites the same source multiple times using `[^2]` throughout the markdown, Pandoc was incorrectly converting each instance into a separate numbered footnote, res…
-
Milestone: Complete Enrichment System + Deck Analyst Agent Implementation
---
-
Week 1 POC Complete
Historical entry — Core Multi-Agent System, Templates & Style Guides, CLI Interface.
-
Git Commit Message - Week 1 POC Complete
---
-
Milestone: Artifact Trail System + Citation-Enrichment Agent
---
-
Milestone: Deck Analysis Agent + Dual-Template/Mode System + Enhanced Citation Enrichment
---
-
releases/v0.2.2-release-notes
-
releases/v0.3.0-release-notes
-
releases/v0.3.3-release-notes
-
releases/v0.3.4-release-notes
-
releases/v0.4.1-release-notes
-
releases/v0.4.3-release-notes
-
releases/v0.5.0-release-notes
-
releases/v0.5.1-release-notes
-
releases/v0.5.2-release-notes
-
releases/v0.5.3-release-notes