|
| 1 | +# Memo structure (the codified instruction) |
| 2 | + |
| 3 | +This file is load-bearing. Anyone editing `src/ycai/reports/docx.py` should |
| 4 | +keep the structure below intact unless the README, this file, ADR 0003, and |
| 5 | +the memo all change together. |
| 6 | + |
| 7 | +The memo (`report.docx`) is a narrative document, 3-6 pages, with embedded |
| 8 | +chart PNGs and verbatim citations. Per [USER.md document-format |
| 9 | +discipline](#) it is the canonical *strategic* surface. The deck mirrors it |
| 10 | +visually but the memo is the load-bearing prose. |
| 11 | + |
| 12 | +## Required sections, in order |
| 13 | + |
| 14 | +1. **Title + dateline** — batch label, generation timestamp, repo URL. |
| 15 | +2. **Executive summary** — 3-4 sentences. Headline coverage %, headline |
| 16 | + capability finding (e.g. "X of Y companies build agents"), one Nobel |
| 17 | + laureate's framing of what that means for capital allocation. |
| 18 | +3. **Introduction (three POVs)** — single paragraph that pits three named |
| 19 | + public voices against each other on what to do with this batch: |
| 20 | + - **Marc Andreessen** (a16z) — techno-optimist concentrate-and-bet |
| 21 | + - **Ray Dalio** (Bridgewater) — diversify, weight macro cycles |
| 22 | + - **Daron Acemoglu** (2024 Nobel laureate, MIT) — productivity claims |
| 23 | + are inflated; weight labor-displacement and redistribution risk |
| 24 | + The paragraph should not pick a winner. It frames the batch findings as |
| 25 | + an empirical input that all three would interpret differently. |
| 26 | +4. **Coverage and methodology** — Tier A/B/C breakdown, Layer 1+2 disclosure. |
| 27 | +5. **The agentic batch** — capability heatmap + analysis paragraph. |
| 28 | +6. **Industry distribution** — top-level industry chart. |
| 29 | +7. **Inside B2B SaaS** — one-layer-deeper breakdown of the largest industry |
| 30 | + bucket using YC's `subindustry` field. Pure passthrough math (not |
| 31 | + LLM-derived) so the breakdown can't drift. |
| 32 | +8. **Tech stack and OSS posture** — chart of *known* tech-stack mentions |
| 33 | + only; the unknown count is rendered as a footnote/asterisk under the |
| 34 | + chart, not as a chart bar. |
| 35 | +9. **Traction signals** — companies that advertise verifiable traction |
| 36 | + (GitHub stars, named customers, funding rounds, revenue, user counts, |
| 37 | + press, partnerships). One section per signal kind, capped at 5 |
| 38 | + companies per kind for legibility, with verbatim detail and a citable |
| 39 | + source URL. Companies without any traction signal are not listed. |
| 40 | +10. **Six company spotlights** — diverse-capability + non-B2B-SaaS picks. |
| 41 | + Each spotlight includes its traction signals as bullets when present. |
| 42 | +11. **What we still cannot answer** — three open questions framed against |
| 43 | + the introduction's three POVs. |
| 44 | +12. **Reproduce this memo** — install + run instructions. |
| 45 | + |
| 46 | +## Why this structure |
| 47 | + |
| 48 | +- **Executive summary first** because most readers don't read past page one. |
| 49 | + The Nobel POV in section 2 is what makes the memo *useful as input to a |
| 50 | + capital allocation decision* — without it, this is just classification. |
| 51 | +- **Three-POV introduction** because no single voice on AI is dispositive |
| 52 | + in 2026. Pitting Andreessen, Dalio, and Acemoglu against each other forces |
| 53 | + the reader to make a judgment rather than absorb a pre-cooked answer. |
| 54 | +- **Sub-industry breakdown** because "B2B SaaS" is the laziest taxonomy |
| 55 | + bucket in venture and tells you nothing useful. One layer deeper |
| 56 | + ("DevTools", "GTM/Sales", "Compliance") differentiates a bet. |
| 57 | +- **Tech-stack-known-only chart** because rendering "unknown" as the largest |
| 58 | + bar is misleading even when honest. The footnote keeps the honesty. |
| 59 | +- **Traction section before spotlights** because traction is a stronger |
| 60 | + signal than capability. A B2B SaaS with 5,000 GitHub stars is more |
| 61 | + interesting than 50 nameless agents companies. |
| 62 | + |
| 63 | +## Citation rules (Layer 2 enforced) |
| 64 | + |
| 65 | +Every number in aggregate prose must trace back to `analytics.headline_numbers`, |
| 66 | +a chart counter, or `extra_allowed` (derived sums and infrastructure facts). |
| 67 | +Per-company verbatim quotes (taglines, rationales, traction details) are |
| 68 | +exempt from drift check but still scanned for forbidden phrases. |
| 69 | + |
| 70 | +The named-figures allowlist (Andreessen, Dalio, Acemoglu) is **explicitly |
| 71 | +not** sanitized — these are real public figures whose published views are |
| 72 | +being summarized, not anonymous "industry insiders". Per Layer 2 invariants, |
| 73 | +the prose around their names must paraphrase rather than fabricate quotes. |
| 74 | + |
| 75 | +## Vetting |
| 76 | + |
| 77 | +The repo's `tests/test_docx.py` exercises: |
| 78 | +- The structure renders end-to-end on a synthetic 8-company cohort. |
| 79 | +- Layer 2 audit aborts the build on a forbidden-phrase injection. |
| 80 | +- Layer 2 audit aborts on a fabricated number injection. |
| 81 | +- Sub-industry table appears when B2B SaaS rows exist. |
| 82 | +- Tech-stack footnote appears when unknown count > 0. |
| 83 | +- Traction section appears when at least one company has signals. |
| 84 | +- Three-POV introduction includes the three named figures. |
| 85 | + |
| 86 | +Run via `make validate-p0`. |
0 commit comments