Changelog
A record of updates, improvements, and new features shipped for the Howard Marks Knowledge Base.
V 1.3
2026-04-16
Knowledge Graph Launch & Visual QA Pipeline
Knowledge Graph — Launch
- •Launched the Howard Marks Knowledge Graph at /graph — an interactive physics-based force-directed visualization of all 197 nodes (164 memos, 16 concepts, 6 eras, 13 people) and 864 cross-references across the entire 35-year memo corpus.
- •Implemented degree-aware dynamic node sizing: concept, era, and people hub nodes scale with their connection count (base size × √degree), making the most-connected intellectual pillars visually prominent. Memo nodes stay compact to avoid visual clutter.
- •Implemented sniper-focus hover mode: hovering a node fades all unconnected nodes to near-invisible opacity, letting the user read the neighborhood topology of any single node in isolation.
- •Implemented single-click → zoom-to-node and double-click → navigate-to-page interaction, matching the Buffett Knowledge Graph UX pattern.
- •Smart label display: Concept/Era/People labels appear at low zoom (threshold 0.8), memo year labels appear at medium zoom (2.2), full memo titles appear only at deep zoom — preventing label clutter at the default view.
- •Added zoom controls (+/−/reset) in the top-right corner and a bottom-center legend showing the four node type colors.
Graph Data Architecture
- •Created app/lib/generateHMGraphData.ts — server-side graph data generator that reads from the HM data layer and builds nodes/edges. Runs at render time with zero external API calls.
- •Created app/components/HMKnowledgeGraph.tsx — client component with react-force-graph-2d canvas rendering, using the Oaktree color palette: Sage Olive (memos), Parchment Gold (concepts), Oaktree Green (eras), Terracotta (people).
- •Solved the empty peopleMentioned[] problem: since the auto-generated memos.ts has no named entity extraction, bridged all 13 person nodes into the graph via a curated PERSON_CONCEPT_MAP mapping each person to their known relevant concepts.
- •Solved the empty erasMentioned[] problem: read era.memoSlugs[] from eras.ts (the manually-curated explicit list) instead of the empty reverse array.
Engineering Documentation
- •Created .agents/workflows/howard-marks-data-architecture.md — comprehensive SOP covering memo/concept/era/person data architecture, HM_base pipeline run order, cross-link enrichment internals, Knowledge Graph architecture, and Changelog SOP.
- •Created .agents/workflows/howard-marks-layout-sop.md — UI standardization guide matching the Buffett Letters 3-column Zen layout standard.
- •Both workflow files now include Mandatory Session Rules: headless browser first, timeout-safe command patterns.
- •Created HM_base/headless_verify.mjs and HM_base/visual_qa.mjs — automated Playwright-based QA scripts covering 7 critical pages (landing, memos list, memo detail, concept page, Buffett person page, eras timeline, GFC era detail). All checks pass at exit code 0.
Headless Browser Infrastructure
- •Migrated all browser-based verification from browser_subagent to local Playwright (chromium, headless, channel: chrome). All future QA runs use node headless_verify.mjs from HM_base/.
- •Screenshots auto-saved to HM_base/headless_screenshots/ with descriptive filenames for each check.
V 1.2
2026-04-15
Data Integrity Sprint & Memo Corpus Finalization
Corpus Finalization — 164 Memos
- •Integrated the final 2 memos of the 2026 cohort: 'AI Hurtles Ahead' (January 2026) and 'What's Going on in Private Credit?' (March 2026), bringing the total corpus to 164 memos spanning 1990–2026.
- •Verified both 2026 memos against their Oaktree originals — neither features a formal letterhead or images. The memo detail page parser now handles their absence gracefully without generating an empty envelope block.
- •Updated yearRange in data/howard-marks/index.ts to '1990–2026' and all sidebar/memos-list section headers to reflect the 2026 upper bound.
Data Integrity Fixes
- •Fixed GFC era data contamination: removed the 2020 memo 'the-anatomy-of-a-rally' from eras.ts GFC memoSlugs[] list — it is a COVID-era memo, not a GFC-era memo.
- •Fixed MemoPeriod TypeScript union type to include the missing 'pandemic' variant, resolving a runtime type error on pandemic-era memo pages.
- •Replaced hardcoded totalCrossLinks: 2400 estimate in index.ts stats with a live dynamic calculation (sum of keyThemes.length + erasMentioned.length + peopleMentioned.length across all 164 memos) — currently resolves to 926.
- •Updated Warren Buffett memoCount references from '162' to '164' across people.ts description text and the Warren Buffett — Howard Marks.md content file.
Component Fixes
- •Fixed app/projects/howard-marks/people/[slug]/page.tsx to import and use dynamic memos.length instead of the hardcoded '162' string for 'across X memos' references.
- •Fixed all 16 concept pages' source attribution footers to use the standard format: Source: Chian.io — Howard Marks Knowledge Base.
- •Updated concept detail page coverage bar to use dynamic memos.length instead of hardcoded 162.
V 1.1
2026-04-13
Letterhead Standardization, Navigation & Concept Attribution
Memo Letterhead Parser
- •Overhauled the memo letterhead parser in app/projects/howard-marks/memos/[slug]/page.tsx to reliably handle diverse Markdown formats: single-line format ('Memo to: X From: Y Re: Z Body…') and multi-line format with newlines between fields.
- •Added a CONFIDENTIAL preamble stripper to remove 'CONFIDENTIAL © Oaktree Capital Management, L.P.' warnings that appeared at the top of some memos.
- •The parsed letterhead renders as a styled 'memo-envelope' HTML block with bold field labels and green-tinted background, matching the Oaktree editorial aesthetic.
Navigation — 2026 Year Range
- •Updated sidebar accordion navigation 'Recent Memos' label from '2024–2025' to '2024–2026' in HMSidebar.tsx.
- •Updated memos/page.tsx 'Recent Memos' section header to include 2026.
- •Updated eras.ts to reflect the extended recent-era boundary.
Concept Pages — Source Attribution
- •Updated all 16 Markdown files in content/howard-marks/concepts/ to display a consistent clickable source attribution block: Source: Chian.io — Howard Marks Knowledge Base.
- •Added a sidebar source attribution block to the concept detail page with a direct link back to the KB hub.
V 1.0
2026-04-10
Initial Launch — Howard Marks Knowledge Base
Memo Corpus
- •Launched with 162 Howard Marks Oaktree memos spanning 1990–2025 — the complete publicly available memo corpus, sourced directly from Oaktree Capital Management's website and archives.
- •Each memo is a standalone page with letterhead envelope rendering, representative passage display, and full memo text.
- •Memos organized into 5 period groups: Early Memos (1990–1999), Crisis Era (2007–2009), Post-Crisis Era (2010–2019), Pandemic Era (2020–2021), and Recent Memos (2022–present).
Knowledge Index
- •Launched with 16 concept pages covering Howard Marks' core investment frameworks: Risk, Market Cycles, Contrarianism, Second-Level Thinking, Investor Psychology, Credit Markets, Distressed Investing, and 9 others.
- •Launched with 6 Market Era pages: The Early Years, The GFC, Post-GFC Recovery, The Pandemic Era, The Post-Pandemic Normalization, and the AI & Late-Cycle Era — each with Historical Context, Core Thesis, and Hindsight Evaluation analysis blocks.
- •Launched with 13 People profiles covering the key investors, economists, and figures most referenced across the memo corpus.
Cross-Link Architecture
- •Established the index.ts enrichment engine: at module load time, memos[].keyThemes[] is used to back-populate concepts[].memoSlugs[], creating bidirectional navigation between all memos and their concepts.
- •Landing page stat pills show live counts: 164 Memos, 16 Concepts, 6 Eras, 13 People, 926+ Cross-links — all dynamically computed from the data layer.
HM_base Content Pipeline
- •Built a 9-step Python pipeline (scrape → postprocess → excerpts → summaries → metadata → rebuild → validate) for ingesting new Oaktree memos from HTML/PDF sources and generating clean Markdown + TypeScript data files.
- •Pipeline registered in oaktree_url_registry.json — all 164 memos tracked with canonical Oaktree source URLs.
Design System
- •Adopted the Oaktree-inspired Wabi-Sabi Zen palette: warm parchment (#F2F0EC), deep forest ink (#16291B), sage green (#4A7C59), and Oaktree gold (#C8A96E).
- •Typography: Manrope for UI labels, serif display family for editorial headings — consistent with the Zen reading aesthetic across all 206 static pages.