Lossless Changelog
component

Onboarding Tooling and Discovered-Pattern Backlog from a Week of Firm Setups

The last six days surfaced enough orchestrator-level work to log: a new agent-skill that codifies the end-to-end procedure for onboarding a VC firm (setup-new-firm), two CLI scripts for capturing DocSend decks programmatically, three issue-resolution write-ups naming real pipeline gaps the recent runs exposed (competitive research not flowing into prose, missing exit-comp agent, unsolicited investor verdicts), one new spec for per-deal analyst focal points, and a small skills-directory rename (skills/ → agent-skills/) to match the parent repo's convention. Also adds a changelog-scope discipline to CLAUDE.md so firm-private content stays out of the orchestrator's log.

Michael StatonMusic Editoraugmented with Claude Code (Opus 4.7)
new(skill): context-v/agent-skills/setup-new-firm/SKILL.md
new(cli):   cli/capture_docsend.py, cli/_docsend_diag.py
new(issue-resolution): three write-ups naming pipeline gaps
new(spec):  context-v/specs/Per-Deal-Focal-Points.md
move(skills): context-v/skills/ → context-v/agent-skills/
docs(CLAUDE.md): add "Changelog scope" section drawing the line
                 between orchestrator-level entries and firm-private content

Pattern: each item below came out of real firm-onboarding work over
the last week. The discoveries are reusable across firms; the deal
content that surfaced them is not — it lives in the firm-private
io/<firm>/ submodules.

* context-v/agent-skills/setup-new-firm/SKILL.md — five-phase
  procedure for onboarding a new VC firm: (1) brand acquisition via
  Firecrawl with analyst-override on the primary-color heuristic,
  (2) firm-directory scaffolding under io/<firm>/ with the canonical
  configs/templates/assets/deals layout and the strict brand-config
  YAML schema, (3) investment-framework outline selection (typically
  forking an existing outline like alpha-partners-7-Cs and
  customizing — section reordering, preambles, preferred-source
  swaps, stage-aware fallbacks), (4) first deal setup with
  deck-input handling (DocSend capture via the new
  cli/capture_docsend.py, ImageMagick screenshot stitching for
  NDA-gated decks, deal-config JSON, codified Sources.md), and (5)
  optional private-repo split via gh CLI with submodule re-add for
  confidential firm data. Encodes specific lessons from the
  alpha-jwc onboarding: don't trust Firecrawl's primary-color field
  blindly, verify against the logo palette; the deck analyst
  extracts DocSend watermarks as the company name if you feed it
  watermarked screenshots; agents leak firm-geography context into
  company-analysis prose (Alpha JWC = Indonesia VC → Portland-OR
  company memo gained Indonesia/rupiah risks); citation-enrichment
  fabricates example.com URLs even in codified-source mode (codified
  Sources.md only constrains the upstream researcher, not the
  downstream enricher).

* cli/capture_docsend.py — Playwright-based capture of DocSend decks
  to PDF, page-by-page screenshot then PyMuPDF assembly. Supports
  both direct-share links (no email gate) and standard links with
  --email gating. Explicit NDA-gated-deck limitation in the
  docstring: those need manual screenshotting in an authenticated
  browser. The complementary cli/_docsend_diag.py is a diagnostic
  v2 with anti-WAF tweaks, form-scoped gate selectors, and a
  post-submit DOM dump for when capture_docsend fails on a new
  DocSend variant. Used during the alpha-jwc onboarding; will be
  the default deck-input path for new firms.

* context-v/issue-resolution/Competitive-Research-Generated-But-Not-In-Prose.md
  — the competitive landscape evaluator agent produces rich, named,
  evidenced competitor data (9+ companies per memo, with funding,
  differentiation, direct/indirect classification) and saves it to
  disk; the writer agent that drafts Category Leadership never sees
  that file. The section emits <needs-source> markers asking for
  "names of the top 3-5 competitors" while the named list sits two
  directories away. Issue write-up names the gap and proposes a fix
  in the writer's outline preferred_sources block.

* context-v/issue-resolution/Including-Comparable-Exits-Valuations-IPOs.md
  — no dedicated agent for exit comparables (IPOs, M&A, secondaries
  for adjacent/analogous companies). The Cash on Cash Return
  Probability section renders bull/base/bear scenarios anchored to
  nothing verifiable because it's left to fish for comps through
  the generic research path that produces the URL-hallucination
  problem. Issue write-up scopes a dedicated comps agent.

* context-v/issue-resolution/Limiting-or-Omitting-Investor-Judgement.md
  — the pipeline renders unsolicited PASS / CONSIDER / COMMIT
  verdicts at the end of Cash on Cash Return Probability and Closing
  Assessment even when the analyst's job is advocacy for IC, not
  adjudication. An automated PASS in that context is worse than no
  verdict. Issue write-up proposes a verdict-omission flag for
  advocacy-mode memos.

* context-v/specs/Per-Deal-Focal-Points.md — spec for analyst-supplied
  ordered bullets that writer agents must respect as load-bearing
  emphasis. Analysts know things automated research won't surface
  (founder's prior wins, partner-thesis match, IC concern to
  preempt). Focal points get the analyst into the prompt as a
  first-class input alongside the deck and Sources.md.

* context-v/skills/ → context-v/agent-skills/ — directory rename to
  match the parent ai-labs/memopop-ai/context-v/agent-skills/
  convention. Moves adhoc-edits-workflow and manage-memo-citations
  under the new path. No content changes to either SKILL.md.

* CLAUDE.md — new "Changelog scope" section. Draws the line: this
  changelog covers orchestrator code, agents, prompts, outlines,
  templates, CLI, docs. Firm-private content (memo versions, brand
  configs inside io/<firm>/, deal setups, source curation) lives in
  the firm's own changelog inside its private submodule. Submodule
  pointer bumps get a one-liner ("Also included: io/<firm> bump to
  <sha>"), never a paragraph about what's in that sha. Patterns
  discovered while editing client memos (e.g., thesis-bleed cleanup)
  belong here as skills/issue-resolution — reference the skill, not
  the memo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Changelog — 2026-06-14_01

What this entry is

Six days of firm-onboarding work surfaced enough reusable orchestrator-level material — a new skill, two CLI tools, three issue write-ups, one spec, a small directory rename, and a CLAUDE.md discipline note — to log as a coherent batch. None of this entry describes what happened inside any firm-private io/<firm>/ submodule. The deal content that surfaced these discoveries stays in its respective firm's own changelog.

The pattern behind the batch

Setting up the first deal for a new firm (Alpha JWC Ventures) exposed every soft spot in the pipeline at once: deck input was a DocSend-gated PDF the orchestrator couldn't ingest, the firm's brand needed reverse-engineering from a heuristic that picked the wrong primary color, the firm's outline was a fork of an existing outline that needed section reordering, and several agents leaked context they shouldn't have (DocSend watermarks misread as the company name; the firm's geography bleeding into company-specific risk prose; citation enrichment fabricating example.com URLs even in codified mode). Each soft spot got either a fix that lives in code or a written diagnosis that lives in context-v/issue-resolution/. The new setup-new-firm skill is the consolidated procedure that captures what to do, in what order, and what to watch for — so the next firm doesn't get to rediscover all of this independently.

What got built that's reusable across firms

CLI: DocSend capture. cli/capture_docsend.py drives a headless Chromium via Playwright to screenshot a DocSend deck page-by-page and assemble the screenshots into a PDF the existing deck_analyst.py agent can consume. Supports the two URL shapes DocSend ships (direct-share links that need no email gate, and standard links with --email gating). Refuses NDA-gated decks (eSignature required) on principle — the docstring explains that bypassing an NDA would be a contractual violation, and points the analyst at the manual-screenshot + PyMuPDF path for those. The companion cli/_docsend_diag.py is a diagnostic v2 with anti-WAF user-agent tweaks, form-scoped gate selectors, and a post-submit DOM dump for when the main script fails on a new DocSend page variant.

Skill: setup-new-firm. The five-phase onboarding procedure, written so an agent reading the SKILL.md can execute it without re-asking the analyst for context that's been settled. Phase boundaries are deliberate: brand acquisition is its own phase because Firecrawl's primary-color heuristic is wrong often enough that the analyst-override step is a hard requirement, not a fallback. The deck-input phase routes through the new CLI scripts above. The optional private-repo split phase uses gh repo create --private + git submodule add because that's the pattern every existing firm submodule was built with, and inventing a new pattern per firm would fragment the tree.

Issue-resolution backlog. Three write-ups, each naming a real pipeline gap surfaced by recent runs:

  • Competitive-Research-Generated-But-Not-In-Prose — the competitive landscape evaluator and the writer agent produce/consume the same memo with no pipe between them. The fix is one block in the writer's outline preferred_sources pointing at the evaluator output file.

  • Including-Comparable-Exits-Valuations-IPOs — Cash-on-Cash Return Probability has no dedicated source for exit comps, so the scenarios it renders are anchored to nothing the analyst can verify. The fix is a dedicated comps agent feeding a structured 2-tables/exit-comps.json.

  • Limiting-or-Omitting-Investor-Judgement — the pipeline emits PASS/CONSIDER/COMMIT verdicts at the end of two sections even when the analyst's job is advocacy. A --no-verdict flag (or a mode-level switch derived from memo_mode: "justify") is the fix.

These three issues are now documented, not yet fixed. The fixes are independent and can be picked up in any order.

Spec: Per-Deal Focal Points. Analysts have opinions about a deck before the orchestrator sees it — founder's prior wins, partner-thesis match, IC concern to preempt, the angle that makes this deck worth the partnership's time. The orchestrator's prompts currently treat that input as "notes" — a soft, optional context block. The spec elevates it to a first-class input: a small ordered list the writer agents must respect as load-bearing emphasis. Implementation is deferred; the spec is the contract we'll build to.

Directory rename: context-v/skills/ → context-v/agent-skills/

The parent ai-labs/memopop-ai repo already uses context-v/agent-skills/. The orchestrator was using context-v/skills/ for the same purpose. Renamed adhoc-edits-workflow/SKILL.md and manage-memo-citations/SKILL.md into the new path. No content changes. This is hygiene, not a refactor — keeps the convention consistent across the memopop tree so agents reading either repo's CLAUDE.md don't have to map between two names.

CLAUDE.md: changelog scope discipline

A new "Changelog scope" section, inserted right after "Recent Changes (2025-11-20)" and before "Ongoing Troubleshooting." Draws the line clearly: orchestrator code/prompts/outlines/CLI/docs belong here; firm-private content (memo versions, brand config tweaks inside io/<firm>/, deal setups, source curation, fact-check corrections) belongs in the firm's own changelog inside its private submodule. Submodule pointer bumps get a one-line "Also included" entry, not a paragraph. Patterns discovered while editing client memos can land here as skills or issue-resolution entries — the pattern is reusable; the changelog entry references the skill, not the memo that surfaced it.

This rule existed in practice but wasn't written down. Today's entry is the first one fully respecting it (the original draft of this changelog described a Panthalassa-specific edit; that content has moved to the alpha-jwc submodule where it belongs).

What didn't change

  • No code in src/. The pipeline behavior is unchanged.

  • No outline YAML, no template, no brand-config schema.

  • No agent prompts.

This is a tooling + documentation batch. The fixes implied by the issue-resolution write-ups are deferred and will land as their own commits.

What's next

  • Pick up at least one of the three open issue-resolution items. Competitive-research → prose is the smallest fix (one outline change) and would land the most quality lift per minute.

  • Wire setup-new-firm into the agent-skill discovery path so it auto-loads when an analyst says "set up a new firm."

  • Build the Per-Deal Focal Points spec into the writer's prompt scaffold.

  • The DocSend CLI scripts will get exercised against the next firm's first deck; expect at least one new DocSend page variant to break capture_docsend.py and require a _docsend_diag.py follow-up.

References

  • context-v/agent-skills/setup-new-firm/SKILL.md — the new onboarding skill

  • cli/capture_docsend.py, cli/_docsend_diag.py — the DocSend tooling

  • context-v/issue-resolution/ — the three new issue write-ups

  • context-v/specs/Per-Deal-Focal-Points.md — the analyst-input spec

  • CLAUDE.md §"Changelog scope" — the rule that shapes future entries

  • apps/memopop-orchestrator/CLAUDE.md §"Architectural direction (2026-05)" — the pipeline directions this work respects