Howard Marks

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.

Howard Marks Knowledge Base — built on Next.js with 164 memos spanning 35 years of Oaktree Capital Management.