HC Protocol · Larry Pipeline · Output Specification
Daily Brief Output PRD
Larry Pipeline v1.0 — Prescriptive Output Requirements
01 Diagnosis — What Version B Gets Wrong
Version B was produced by the Larry pipeline (Claude Code automated). Version A was produced manually via Claude.ai. The comparison reveals that Version B's failure mode is not signal selection (it ingested 28 signals vs. 10) — it's output depth. Version B is a report that tells Jason what happened. Version A is an execution system that tells Jason what to do and provides the tools to do it. These are different products.
| Dimension | Version B (Fail) | Version A / Target (Pass) |
| Signal cards | 3–4 sentence blurbs. No structure. No columns. | 3-column anatomy: What Happened / Why It Matters / Action. Each column 80–120 words. |
| Links | Many broken or missing. Source links not verified. | Every source link verified live before publish. Card footer has distinct source buttons. |
| Seeds | Not present. "Action: Add X to Y" is not a seed. | Every Track A and Track B signal has a full pasteable Claude session seed with full context, task, win/loss conditions. |
| SVG diagrams | Not present. | Every Track A and B signal has an inline SVG diagram visualizing the key insight, contrast, or arc. |
| Win/Loss conditions | Not present. | Every surfaced signal has explicit falsifiable win condition AND loss condition with redirect. |
| Order chain | Not present. | Every signal has a 3-node 2°/3°/4° order chain showing compound effects. |
| Synthesis section | 2-sentence paragraph. No depth. | Full "The Thread" section: pull quote, vision nodes grid (3-column), 3-paragraph synthesis, world arc (2×2 grid), future unlocks (4 items). |
| Registry updates | Bullet list of node names. Not machine-readable. | Full JSON node objects with id, label, category, status, briefs[], connections[], sources[], description. |
| Timing pills | Not present. | Every surfaced signal has a red timing pill: "⏱ [specific urgency reason]. Act [timeframe]." |
| Action specificity | "Add X to Y" — no context, no commands, no session. | Every Track B signal has numbered build steps with exact commands where applicable. |
| Scoring visibility | Score shown inline (14/20). No rubric explanation. | Scores collapsed behind details element. Full scoring table with all 10 signals, U/N/A/F breakdown, visible on demand. |
| Series arc | Single "Prev:" link. | Full series arc bar with clickable links to all prior briefs, current brief highlighted. |
| Theme toggle | Present ✓ | Present ✓ |
| Registry bar | Absent | Purple registry bar with node update tags and link to knowledge-registry. |
Root cause: Version B treats each signal as a news item to summarize. Version A treats each signal as a strategic asset to deploy. The PRD below specifies exactly what "deploy" means structurally for every signal type.
02 Scoring Engine Requirements
2.1 Rubric
Score every signal on four dimensions, each 1–5. Total = /20. Threshold to surface = ≥16/20.
| Letter | Dimension | Scoring guidance |
| U — Urgency | How time-sensitive is the action this unlocks? | 5 = act today or lose the window. 3 = act this week. 1 = evergreen, no urgency. |
| N — Narrative Fit | How directly does this stack on an established registry node or active thesis? | 5 = confirms/extends an established node with new evidence. 3 = loosely related. 1 = no narrative fit. |
| A — Asymmetry | Does surfacing this unlock disproportionate return vs. effort? | 5 = small action unlocks major compound. 3 = reasonable ROI. 1 = linear effort/return. |
| F — Falsifiability | Is there a measurable win/loss condition that can be evaluated within 30 days? | 5 = binary result within 7 days. 3 = result visible within 30 days. 1 = no measurable outcome. |
2.2 Routing rules
- ≥18/20 + Forge infrastructure relevance: Track B Emergency — lead the brief, banner alert pinned below header.
- ≥16/20 + publishing action: Track A — full signal card with SVG, seed, win/loss, order chain.
- ≥16/20 + build action (code/config/infrastructure): Track B — full signal card with numbered build steps, command blocks, seed.
- 13–15/20: Track C — banked. One sentence per signal in collapsible Track C section. Include SPO triplet for registry.
- <13/20: Dropped. List title only in drop note at bottom of Track C.
Scoring calibration rules
- Score signals through the lens of established registry nodes first. A signal that confirms/upgrades an established node scores higher on N than the raw news value suggests.
- Urgency = urgency of the action it unlocks, not urgency of the news event. A 1332pt HN thread about EU surveillance scores U=5 if the publishing window is today, not because the EU vote happened today.
- Never inflate scores to manufacture Track B. If there are no build signals, Track B is empty. A zero-Track-B day is a correct output.
- Check prior brief registry for "STACKS ON" context before scoring N. A signal stacking on a growing node that needs one more confirmation to become established should score N=5.
03 Signal Card Anatomy (Required)
Every Track A and Track B signal requires a full signal card. Track C signals use the condensed list format only. The following anatomy is mandatory — no shortcuts.
3.1 Card sections in order
A. Ribbon bar
Required
Colored left-border ribbon showing what this signal stacks on. Format:
↑ STACKS ON: [node-id] · [node-id] followed by 1-sentence explanation of the stacking relationship. Color: green for Track A, blue for Track B, red for Emergency.
B. Card header
Required
Two-column grid: signal strength box (left, 50px) + metadata + headline (right).
- Signal box: 5-dot strength indicator. Dots filled red for score level (e.g., 4/5 = 4 red dots). Label: "Signal" or "Severity" for emergencies.
- Metadata row: Source domain as clickable link → HN badge with pts and comments if applicable → score badge (e.g.,
17/20 · U4 N5 A4 F4).
- Headline: Cormorant Garamond serif, 1.25rem+. Clickable link to source. Must be the actual article title, not a rewritten version.
C. 3-column body
Required — 3 columns, responsive to 1 column on mobile
Column 1 — What Happened: Factual summary of the signal. 80–120 words. No editorializing. This is the source content, accurately represented.
Column 2 — Why It Matters (strategic frame): How this connects to the active thesis, registry node, or MasteryOS positioning. 80–120 words. One bolded key insight per column.
Column 3 — The Action / The Angle: For Track A: the publishing angle, hook, and target. For Track B: what to build and why now. 80–120 words. Must be specific — not "consider doing X" but "publish X to Y via NowPage" or "update Z file with these changes."
D. SVG diagram
Required for every Track A and Track B signal
Inline SVG, viewBox="0 0 960 [height]", width="100%". Must visualize the core insight — a contrast, an arc, a spectrum, a flow, or a decision tree.
Never decorative. The diagram must add information not already in the text columns.
- Use only: rects, circles, lines, text, path for arrows. No external assets.
- Colors from the design system: --red, --gold, --green, --blue, --orange, --purple.
- Dark background fill for shapes:
fill="#0C0C0C" or fill="var(--s2)".
- Font: IBM Plex Mono, font-size 6.5–11px. All text must be legible at viewBox scale.
- Include a label bar above the SVG:
class="svg-lbl", 1 sentence describing what the diagram shows.
- Wrap in
class="svg-wrap" div with background var(--s2) and bottom border.
E. Order chain (2°/3°/4° effects)
Required
3-node horizontal chain. Each node contains:
- Order number in large Cormorant Garamond (2°/3°/4°), faded red
- Short label: time horizon or strategic layer (e.g., "Today", "JV Pitch", "2026", "The Arc")
- 1–2 sentences of compound effect text. Bold the key insight phrase.
Nodes are connected visually by → arrow character. Overflow-x scroll on mobile.
F. Timing pill
Required
Red-tinted pill with ⏱ prefix. Explains specifically WHY this must be acted on today or this week. Must name the closing condition (thread is live, price window, JV call is upcoming, etc.). Never generic ("act soon"). Format:
⏱ [Specific reason]. [Specific action] [Specific timeframe].
G. Win/Loss conditions
Required — Falsifiability gate
2-column grid: Win (green) | Loss (red).
- Win: Specific measurable outcome. Numbers where possible. "Article published, >150 HN pts within 24hrs AND 1+ inbound within 7 days." Not: "Article does well."
- Loss: What the failure looks like AND a redirect. "If <40 pts → [specific pivot action]." The redirect is mandatory — every loss condition must have a next move.
H. Seed row
Required for every Track A and Track B signal
Purple-tinted row at card bottom with seed button. See Section 4 for seed content requirements.
I. Card footer
Required
Source link button(s) — each a distinct clickable element with external link icon. Tag pills for registry nodes. Format:
class="src-link" buttons +
class="tag-pill" spans.
04 Seed Quality Requirements
A seed is a complete, pasteable context block for starting a new Claude chat session. It is not a summary. It is not an action item. It must be copy-pasteable directly into a new Claude chat and produce useful work without any additional context from Jason.
4.1 Seed content structure (mandatory fields)
[CONTEXT BLOCK — always first]
You are helping Jason MacDonald, founder of MasteryMade. HC_TOKEN: JMD-FORGE-2026
STACK: [current Forge stack summary — ~3 sentences]
ACTIVE JVs: [current JV pipeline]
BRAND: "Builder. Operator. Architect." | "Dominia Facta. Build what compounds."
REGISTRY: https://jasondmacdonald.com/knowledge-registry
[TRACK + SIGNAL]
TRACK [A/B] — [Signal name] / [Strategic framing] [Score/20]
[SERIES CONTEXT]
SERIES: Stacks on [node-id (status, N briefs)]. [1-2 sentences on what specifically this new signal adds to the existing node.]
[SIGNAL DETAIL]
SIGNAL: [Full factual description of what happened. Include: source, key data points, what was said/done/published, any specific numbers.]
SOURCE: [URL]
[STRATEGIC FRAME]
[HOOK]: [The specific first line of the article/asset — what opens it]
[ANGLE]: [The argument structure — why this specific signal matters in this specific way for this specific thesis]
[TRACK A: PUBLISHING TARGET]
PUBLISH: [Specific slug] via NowPage ([standalone/companion])
WIN: [Specific measurable outcome — pts within timeframe AND inbound within timeframe]
LOSS: [What failure looks like → specific redirect]
OR
[TRACK B: BUILD TARGET]
BUILD: [What to build, specific file/config/command targets]
WIN: [Specific measurable outcome — what's done, what's verified, timeframe]
LOSS: [Failure condition → specific redirect]
[TASK LINE — always last]
Task: [1–2 sentence specific task instruction]. Return [specific deliverable].
4.2 Seed quality gates
- Self-contained: A Claude instance with no memory of prior sessions must be able to execute the seed without asking clarifying questions.
- Specific publish targets: Track A seeds must include the exact slug for NowPage publication.
- Specific task lines: The Task line must name a specific deliverable (article text, command sequence, 2-paragraph asset, etc.) and a return format.
- Win/Loss are measurable: No seed may use "success" or "failure" without a specific observable condition attached.
- Context block is current: The STACK section must reflect the current Forge configuration (Channels, v2.1.81 features, DEFCON status, etc.).
4.3 Seed button implementation
The seed is stored as a JavaScript string in a const seeds = {} object keyed by signal identifier. The seed button calls a seed(key) function that writes the seed string to clipboard and shows a toast. The button must:
- Show an SVG copy icon + "Seed A →" or "Seed B →" label before click.
- Change to a green checkmark + "Copied" for 2.8 seconds after click.
- Use
class="seed-btn" and add class="ok" state on success.
- Be inside a
class="seed-row" div that shows the seed's purpose in dim type to the left.
05 SVG Diagram Requirements
5.1 Permitted diagram types
| Type | When to use | Example from series |
| Contrast (vs.) | Signal proves X beats Y with evidence | Generic AI vs. Expert Factory (Walmart 3×) |
| Arc / trajectory | Signal is the Nth point in a multi-brief arc | 5-signal cost-collapse arc (#49→#55) |
| Spectrum / scale | Signal positions something on a dimension | Platform publishing collapse spectrum (#54) |
| Failure flow | Signal documents a failure mode | LiteLLM supply chain attack flow (#56) |
| Methodology comparison | Signal proves a methodology at a different scale | Personal encyclopedia → Expert Factory → HC Protocol (#57) |
| Inflection / failure arc | Signal documents where a good approach turns bad | Vibe coding inflection arc (#57) |
5.2 Technical requirements
- All SVGs are inline — no
<img src>, no external files.
- viewBox height: 100–130px typical. Never exceed 200px without strong justification.
- All text uses
font-family="IBM Plex Mono".
- All critical text (labels, key numbers) must be 7px+ at viewBox scale.
- Arrow markers use
<defs><marker> pattern — see existing brief source for the exact marker template.
- DPR: SVGs are vector and scale cleanly. No canvas DPR concerns.
- Contrast: text on dark backgrounds uses
fill="#EAE4DB" (--text) or fill="#888079" (--dim). Text on colored areas uses white fill="#fff" or black fill="#000".
5.3 What SVGs must NOT be
- Decorative headers or dividers
- Logo reproductions
- Generic "network graphs" that don't show specific data
- Anything that could be removed without losing information
06 The Thread — Synthesis Section
The Thread is the most important section of the brief. It is where the brief stops being a list of signals and becomes a strategic document. Version B's synthesis was 2 sentences. The target is a full section with five subsections.
6.1 Pull quote
Required — opens The Thread section
Cormorant Garamond italic, ~2rem, gold color. 2–3 sentences maximum. Must: (1) name what today's brief proved, (2) connect it to the series arc, (3) end with a forward-pointing implication. This is Jason's voice — stoic, direct, no hedging.
6.2 Vision nodes grid (3-column)
Required — one cell per surfaced signal
3-column grid (responsive to 1 on mobile). Each cell:
- Icon (emoji, 1.2rem)
- Title (Cormorant Garamond, bold): "[Signal Name] → [What It Enables]"
- Body (0.78–0.82rem): ~80 words connecting this signal specifically to the meta-vision. Bold the compound insight. Must reference specific prior briefs or registry nodes where relevant.
- Track tag badge at bottom: "Track A → [specific action]" or "Track B → [specific build]"
6.3 Synthesis body (3 paragraphs)
Required
- Paragraph 1 (~100 words): What the scoring rubric did today — how many signals, what routed where, why. Confirms the system is working as designed.
- Paragraph 2 (~120 words): The connection between the Track A signals that wasn't obvious from the individual cards. What do they prove together that neither proves alone? Use em-tagged pull phrases for key insights.
- Paragraph 3 (~100 words): Something from Track C that deserves more attention than a single sentence — a pattern, a naming collision, an accumulating arc. Then the forward implication for the series.
6.4 World arc (2×2 grid)
Required
Four cells across two time horizons:
- Near (orange): "Now → 30 days" — what the market is doing right now as a result of today's signals
- Near-mid (gold): "2026" — what this brief's signals indicate about the year ahead
- Mid (green): "2026–2027" — the medium-term compound effect if the thesis holds
- Meta (purple): "The Arc" — how today connects to the 10+ week compound arc of the series
Each cell: horizon label + title (Cormorant bold) + 60–80 words of substance. Bold the key implication per cell.
6.5 Future unlocks (4 items)
Required
4 action items with time horizons: Today (orange) / This week (gold) / Before next JV call or milestone (green) / The arc (purple). Each:
- Time label (90px min-width, uppercase monospace)
- 2–3 sentences of specific action. Bold the deliverable name.
- Never generic. "Publish X" not "Consider publishing content."
Emergency items (red left border) appear before Today items when present.
07 Registry Update Requirements
The knowledge registry at jasondmacdonald.com/knowledge-registry must be updated after every brief. The update is mandatory, not optional.
7.1 What triggers a node update
- New node: Any signal that introduces a concept not currently in the registry with ≥2 expected future stacking signals.
- Status upgrade: Any node that receives its 3rd independent confirmation signal upgrades from
growing to established. This must be explicit in the brief's registry bar.
- Description update: Any established node that receives a new evidence signal gets its description updated to reference the new brief and data point.
- New connection: Any signal that links two existing nodes that weren't previously connected.
7.2 Node JSON structure (required fields)
{
"id": "kebab-case-unique-id",
"label": "Human Readable Label",
"category": "platform|masteryos|forge|nowpage|signal-engine",
"status": "established|growing|seed",
"brief_first": "#47",
"briefs": ["#47", "#52", "#57"],
"description": "Full paragraph description. Include: what this node represents, key evidence signals, current strategic relevance. 2–4 sentences minimum.",
"connections": ["other-node-id", "another-node-id"],
"sources": [
{"label": "Brief #57 — context note", "url": "https://jasondmacdonald.com/daily-brief-2026-03-26"},
{"label": "Source article title", "url": "https://verified-live-url.com/article"}
]
}
7.3 Source URL verification (critical)
Every URL in every node's sources array must be verified live before the registry is published. A broken source link in the registry is worse than no source link. Use web_fetch or a HEAD request to verify each URL returns 200 before including it. If a URL cannot be verified, use the brief URL as the source and note the original URL in the description field only.
7.4 Registry bar in the brief
The purple registry bar above the intake bar must show all node changes for that brief. Format per tag:
- New node:
new: [node-id] ([category], [status]) — orange border
- Status upgrade:
↑ [node-id] [old-status] → [new-status] — gold border
- Evidence added to existing node:
↑ [node-id] (new signal adds ...) — gold border
- Emergency/Critical:
⚡ [node-id] — [1-line description] — red border
08 HTML/CSS Standards
8.1 Type scale
| Element | Font | Size | Weight |
| Brief headline H1 | Cormorant Garamond | clamp(1.8rem, 3vw, 2.8rem) | 300 |
| Section/card headlines | Cormorant Garamond | 1.25rem–1.4rem | 600 |
| Synthesis pull quote | Cormorant Garamond italic | clamp(1.35rem, 2.5vw, 2rem) | 300 |
| Body copy | IBM Plex Sans | 0.85rem–0.95rem | 300–400 |
| Labels, chips, tags | IBM Plex Mono | 0.5rem–0.68rem | 400–500 |
| Code blocks | IBM Plex Mono | 0.7rem–0.8rem | 400 |
| SVG text | IBM Plex Mono | 6.5px–11px at viewBox | 400–600 |
8.2 Responsive scaling (required)
html { font-size: clamp(14px, 0.8vw + 11px, 17px); }
This single rule makes all rem-based sizes fluid. Do not set fixed font sizes on body or paragraphs — use rem units relative to this fluid base.
8.3 Canvas DPR fix (if using canvas graphs)
function setCanvasSize(canvas) {
const dpr = window.devicePixelRatio || 1;
const rect = canvas.parentElement.getBoundingClientRect();
cssW = rect.width;
cssH = canvas.offsetHeight || 520;
canvas.width = Math.floor(cssW * dpr);
canvas.height = Math.floor(cssH * dpr);
canvas.style.width = cssW + 'px';
canvas.style.height = cssH + 'px';
}
// In draw():
ctx.scale(dpr, dpr); // FIRST thing after clearRect — all coords in CSS pixels
Hit detection must use getBoundingClientRect() client coordinates (CSS pixels), not buffer pixel coordinates.
8.4 Design tokens (required, CSS custom properties)
:root, [data-theme="dark"] {
--red: #C0272D; --gold: #C8A96E; --green: #3DAA6B;
--blue: #4A9EDB; --orange: #E8813A; --purple: #9B6FD4;
--bg: #0C0C0C; --s1: #111; --s2: #161616; --s3: #1c1c1c;
--border: #222; --b2: #2a2a2a;
--text: #EAE4DB; --dim: #888079; --muted: #444;
--hbg: rgba(12,12,12,.97);
}
[data-theme="light"] {
--bg: #F4F1EC; --s1: #FFF; --s2: #EDE9E2; --s3: #E4DFD7;
--border: #D5D0C8; --b2: #C5BFB5;
--text: #1A1410; --dim: #5C5650; --muted: #9A9590;
--hbg: rgba(244,241,236,.97);
}
8.5 Required page sections in order
<script id="registry-json"> — machine-readable JSON at top of body
- Theme toggle + seed scripts (inline JS)
- Sticky header (
class="hdr") with logo, prev link, PRD version chip, brief number chip
- Emergency alert banner (if Track B Emergency) — pinned below header, full width
- Meta thesis bar — today's thesis in gold italic
- Purple registry bar — node updates for this brief
- Intake bar — date, summary phrase, signal counts, collapsible score table
- Collapsible series arc bar
- Main content: Track B Emergency (if any) → Track B → Track A → Track C
- The Thread synthesis section
- Footer with brief number, PRD version, prev link, registry link
09 Working Links — Non-Negotiable
Every link in the published brief must be verified before publication. This is the single most basic quality gate and Version B failed it.
9.1 Link verification protocol
Before the brief is published via NowPage, every URL in the brief must pass one of:
web_fetch(url) returns 200 with content
- URL was verified live as part of the signal fetch process (i.e., the article was read to score it)
If a URL cannot be verified:
- For source articles: use the parent domain URL (e.g.,
https://news.ycombinator.com) instead of the direct thread URL, and note in card meta that the direct URL was unavailable.
- For registry sources: use the brief's own URL as the source and note the original in the description field.
- Never publish a dead link. A "source not available" note is better than a 404.
9.2 HN links
HN thread URLs follow the pattern https://news.ycombinator.com/item?id=[ID]. The ID is not always in the signal input. If the direct HN thread URL is not available, use https://news.ycombinator.com as the source and note "HN [score]pts" in the badge only — do not fabricate a thread URL.
10 Pre-Publish Quality Gate Checklist
Before calling publish_to_nowpage, verify every item in this list. If any item fails, fix it before publishing.
Signal processing
- ☐ All signals scored on U/N/A/F with written justification for each dimension
- ☐ Routing decisions consistent with rubric (≥16 surfaces, <16 banks or drops)
- ☐ Scores reviewed against established registry nodes — N scores recalibrated if needed
- ☐ No Track B items manufactured if no genuine build signal exists
Signal cards
- ☐ Every Track A/B card has: ribbon, header, 3-column body, SVG, order chain, timing pill, win/loss, seed row, footer
- ☐ Every SVG adds information not already in the text (not decorative)
- ☐ Every timing pill names a specific closing condition
- ☐ Every win condition is measurable with a specific number and timeframe
- ☐ Every loss condition has a specific redirect action
Seeds
- ☐ Every Track A and Track B signal has a seed
- ☐ Each seed contains: CONTEXT BLOCK, TRACK+SIGNAL, SERIES, SIGNAL DETAIL, SOURCE, HOOK/ANGLE, PUBLISH/BUILD target, WIN, LOSS, TASK line
- ☐ Each seed is self-contained — no prior session memory required to execute it
- ☐ Track A seeds include specific NowPage slug
- ☐ Seed button implemented with copy-to-clipboard + toast + state change
Links
- ☐ Every source URL verified live before publish
- ☐ No fabricated HN thread URLs
- ☐ Every internal brief link (series arc, registry, prev) uses correct slug
- ☐ registry link points to
jasondmacdonald.com/knowledge-registry
Synthesis section
- ☐ Pull quote present and in Jason's voice
- ☐ Vision nodes grid has one cell per surfaced signal
- ☐ All 3 synthesis paragraphs present
- ☐ World arc has all 4 cells
- ☐ Future unlocks has 4 items with correct time horizons
Registry
- ☐ Registry bar shows all node changes for this brief
- ☐ New nodes have complete JSON (all required fields)
- ☐ Status upgrades applied where 3rd confirmation signal received
- ☐ All source URLs in node JSON verified live
- ☐ Registry published via NowPage update_mode=replace after brief publishes
HTML/CSS
- ☐
html { font-size: clamp(14px, 0.8vw + 11px, 17px); } present
- ☐ All design tokens as CSS custom properties
- ☐ Light/dark theme toggle functional
- ☐ All card grids responsive to 1 column on mobile
- ☐ Canvas DPR fix applied if canvas elements used
- ☐
hc-protocol meta tag with JMD-FORGE-2026
- ☐ Machine-readable
registry-json script block present
Summary — The One Principle
Version B tells Jason what happened. The target brief tells Jason what to do and gives him the tool to do it in one click. Every structural requirement in this PRD serves that single principle.
Larry Brief PRD v1.0 · Jason MacDonald · 2026-03-26 · HC Token: JMD-FORGE-2026