MasteryMade · Intelligence PRD

PRD 6: Signal Engine + Daily Brief Agent

PRD 6 of 12 Depends: PRD 1, 3
Parent: Master Registry v1.0 — Section 06b · Owner: Lane A

6.1 Purpose

Autonomous daily brief generation on Forge. No human trigger. Gate 1 content flows in, gets filtered against current goals/rocks/sprints, produces execution directives — not summaries. Every item has a falsifiable win/loss condition. Knowledge graph updates silently.

6.2 Current → Target

AspectCurrent (manual)Target (autonomous)
TriggerJason opens Claude.aiForge cron 5:30 AM CT
SourcesWeb search in sessionPre-ingested Gate 1 from universal ingest
FilteringManual relevanceAutomated against 321 threads + sprint goals
OutputPublished via NowPage MCP in Claude.aiAuto-published, email/Telegram notification
Knowledge graphManual (sometimes skipped)Auto-extracted SPO triplets, auto-published
Brief numberManually trackedAuto-incremented from registry
Session seedsCopy/paste textStructured JSON seeds Forge/Claude.ai can ingest

6.3 Architecture

Forge VPS (daily cron: 5:30 AM CT)
├── 1. GATHER — Query content table: gate=1, ingested_at > last_brief
├── 2. FILTER — Score each piece against current sprint context
│   ├── > 0.7 → Track A or B candidate
│   ├── 0.4-0.7 → Seed candidate
│   └── < 0.4 → Suppress
├── 3. GENERATE — Claude API: Track A/B/C with v3.0 rules
├── 4. EXTRACT — Track C: SPO triplets → knowledge-registry update
├── 5. PUBLISH — HTML brief → jasondmacdonald.com/brief-[N]
└── 6. SEED — Structured prompts per item → Supabase for retrieval

6.4 Sprint Context

Schema: sprint_context

CREATE TABLE sprint_context (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  context_type TEXT NOT NULL CHECK (context_type IN (
    'rock','sprint','goal','thread_active','thread_seed','thread_foundation','domino'
  )),
  title TEXT NOT NULL,
  description TEXT,
  status TEXT DEFAULT 'active',
  priority INT,
  keywords TEXT[],
  created_at TIMESTAMPTZ DEFAULT now(),
  updated_at TIMESTAMPTZ DEFAULT now()
);

Content-to-sprint scoring

Per content piece: keyword overlap (30%) + embedding similarity against context description (70%) × priority multiplier (domino: 2.0, active thread: 1.5, sprint: 1.3, rock: 1.2, seed: 0.8). Return highest-scoring context match.

6.5 Brief Generation Rules

Zero Fluff — every sentence actionable or cut. Max 3 items per track. Falsifiable win/loss conditions required ("Learn about X" invalid, "Ship X to Y by Z" valid). Track C entities extracted but NEVER shown in brief body.

Output structure

{
  "brief_number": N, "date": "YYYY-MM-DD",
  "track_a": { "title":"Inbound Engine", "items":[
    { "headline":"", "source":"url", "why_it_matters":"",
      "directive":"exact action", "win_condition":"falsifiable",
      "seed":{ "type":"writing|code|strategy", "prompt":"..." } }
  ]},
  "track_b": { "title":"Build Engine", "items":[same] },
  "track_c_entities": [
    { "subject":"","predicate":"","object":"","source_brief":N,"stacks_on":"node_id|null" }
  ]
}

6.6 Knowledge Graph Automation

After every brief: fetch current registry JSON from jasondmacdonald.com/knowledge-registry → verify HC access token (JMD-FORGE-2026) → for each Track C entity: if stacks_on existing node → update node (increment mentions, add connection); else → add new node → publish updated registry via NowPage replace. Never skip this step.

6.7 Session Seeds

{
  "seed_id": "UUID", "brief_number": 52, "track": "A",
  "seed_type": "writing", "title": "Write LinkedIn post about [topic]",
  "context": "Source + expert positioning + thread alignment",
  "directive": "Write 200-word post using jason-writer voice...",
  "win_condition": "Published, engagement > 10 in 24h",
  "pre_loaded_skills": ["jason-writer","linkedin-growth-engine"],
  "estimated_time": "15 minutes"
}

Stored in Supabase. When Jason starts a session: "run seed from this morning's brief" → system loads full context.

6.8 Notification

Telegram on publish: brief number, Track A/B headlines with directives, link to full brief, seed count. Optional weekly email digest: all briefs, knowledge graph growth, completed vs missed win conditions.

6.9 Acceptance Criteria

MASTERYMADE — PRD 6 of 12

Dominia Facta. Build what compounds.