# Briancl2 Customernewsletter Events Extraction

> Events Extraction

- Skill: `tomevault-io/briancl2-customernewsletter-events-extraction` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/briancl2-customernewsletter-events-extraction`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/briancl2-customernewsletter-events-extraction/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/briancl2-customernewsletter-events-extraction

---


# Events Extraction

Extract, classify, and format upcoming events and webinars for the newsletter.

## Quick Start

1. Receive list of event URLs (5-15 typical)
2. Fetch each URL and extract event details
3. Classify: Virtual, In-person, or Hybrid
4. Assign canonical categories (max 2, prefer 1)
5. Format into tables and bullet lists
6. Write output to `workspace/newsletter_phase2_events_YYYY-MM-DD.md`

**Independence**: This phase runs independently of Phases 1A-1C and can execute in parallel.

## Inputs

- **Deterministic Phase 2 event-source artifact** (mandatory):
  - `workspace/newsletter_phase2_event_sources_YYYY-MM-DD.json`
  - Generated by: `python3 tools/extract_event_sources.py <START_DATE> <END_DATE>`
- **Deterministic source config** (required by extractor):
  - `kb/EVENT_SOURCES.yaml`
- **Optional direct URLs** (fallback only when artifact is missing):
  - `https://github.com/resources/events`
  - `https://developer.microsoft.com/en-us/reactor/series/S-1625/`
  - `https://developer.microsoft.com/en-us/reactor/series/S-1631/`
  - Note: Reactor series IDs are curated seeds and should be refreshed during KB maintenance.
- **Curator notes file** (optional): `workspace/Jan.md` or similar
- **COLLECTION_DATE**: Date for filename (defaults to today)

## Output

- **File**: `workspace/newsletter_phase2_events_YYYY-MM-DD.md`

## Core Workflow

### Step 0: Deterministic Source Extraction

Run deterministic extraction before event curation:

```bash
python3 tools/extract_event_sources.py <START_DATE> <END_DATE>
```

Then verify output exists:

- `workspace/newsletter_phase2_event_sources_<END_DATE>.json`

If this phase is part of a full run, record receipt immediately after writing the JSON:

```bash
bash tools/record_phase_receipt.sh <START_DATE> <END_DATE> phase2_event_sources workspace/newsletter_phase2_event_sources_<END_DATE>.json
```

### Step 1: Discovery

Use the deterministic JSON candidates as primary inputs. Scan all candidate URLs, then enrich with in-range event detail pages.

**GitHub Resources Events** (`github.com/resources/events`):
- Fetch the page and event deep links (`github.com/resources/events/<slug>`), extract all upcoming events
- These are primarily in-person events (AI Tour, GitHub Connect, conferences) and KUWC virtual series

**Microsoft Reactor** (series pages + event deep links):
- Prefer series pages and deep links from the JSON artifact
- Follow series links (for example S-1625 Agentic DevOps Live) to gather session pages
- Avoid Reactor search URLs as row-level event links

**Microsoft AI Tour** (`aitour.microsoft.com`):
- Check for cities where GitHub has a confirmed booth/presence
- Cross-reference with github.com/resources/events (AI Tour events appear on both)

**Curator notes**: Check for manually added event URLs or KUWC series entries

### Step 1.5: Reactor Event Filtering (L69)

The Reactor catalog contains many events. Apply these filters:

**INCLUDE** (all must be true):
- Event is in English
- Event involves GitHub, Copilot, GHAS, VS Code, or Azure DevOps with GitHub integration
- Event is relevant to enterprise engineering leaders (not consumer/hobbyist)
- Event provides actionable training, product updates, or security guidance

**INCLUDE event types**:
- Agentic DevOps Live series (GitHub + Azure integration, modernization, security)
- VS Code Live release events (product updates)
- AI Dev Days with GitHub/Azure tracks (hackathons with enterprise prizes)
- Security sessions using GHAS + Defender for Cloud
- App modernization with Copilot agents (Java, .NET)
- GitHub + Azure DevOps workflow sessions

**EXCLUDE**:
- Non-English language events (Spanish, Portuguese, etc.)
- Competition/gaming formats ("Agents League Battle", esports-inspired)
- Generic AI framework tutorials without GitHub integration (LangChain4j, generic Python AI)
- Beginner-level series on non-GitHub tools
- Events with no GitHub speaker or GitHub product involvement

**Key signal**: Check the event tags. Events tagged with `Github`, `GitHub Copilot`, `Agentic DevOps`, or `VS Code` are strong candidates. Events tagged only with `AI` or generic topics without GitHub involvement should be excluded.

### Step 2: Extraction

Extract required fields per event:
- Event title (exact from source)
- Date (normalize to date only for virtual; include CT times only for conference sessions)
- Format: Virtual, In-person, or Hybrid
- Registration URL (direct sign-up link)

Optional but recommended:
- Location (City, ST, Country for in-person)
- Description (1-2 sentences, enterprise value focused)
- Speakers (if available)
- Series information

### Step 3: Classification

See [events-formatting.md](references/events-formatting.md) for complete formatting rules.

**Canonical categories** (use ONLY these, prefer 1, max 2):
- **Copilot**: All GitHub Copilot related sessions (VS Code AI events implicitly map here)
- **GitHub Platform**: Core platform, Actions, general feature launches
- **Developer Experience**: Workflows, training, productivity enablement
- **Enterprise**: Compliance, governance, administration, security policy

**Skill level**: Include only "Introductory" or "Advanced" when explicitly stated. Omit otherwise.

### Step 4: Formatting

**Virtual events**: `## Virtual Events` heading, table with Date + Event + Categories (NO times)
**In-person events**: `## In-Person Events` heading, table with Date + Location + Event
**Behind the scenes**: `## Behind the scenes` heading, short bullets for operational notes/recordings
**Hybrid events**: List under In-person with "(Hybrid, virtual attendance available)"
**Conference sessions**: Detailed tables with Date + Time (CT) + Session + Description

### Step 5: Standard Content

Always include these blocks in the output:
- Copilot Fridays back catalog link
- Brian's YouTube playlists (3 playlists)

### Step 6: Validation

Before writing output:
- [ ] Title, date, and registration URL present for all events
- [ ] Conference session times converted to CT
- [ ] All links embedded as markdown (no raw URLs)
- [ ] Hybrid listed under In-person with virtual note
- [ ] Categories use canonical taxonomy: `Copilot`, `Copilot, Advanced`, `Copilot, New Features`, `GHAS`, `GHAS, Security`, `Enterprise`, `GitHub Platform`. Never use `Developer Productivity` or `Platform` alone.
- [ ] Enterprise relevance satisfied
- [ ] Source diversity present: include event links from both GitHub Resources and Microsoft Reactor when available in range
- [ ] At least one Reactor-linked event appears in Virtual Events for >=30-day ranges when Reactor has in-range GitHub events
- [ ] Event count floor by range length:
  - >=60-day range: 12+ total events
  - >=30-day range: 8+ total events
  - <30-day range: 4+ total events
- [ ] Event row URLs are deep links, not landing/search placeholders
- [ ] Do not use these as row-level event URLs:
  - `https://resources.github.com/events/`
  - `https://github.com/resources/events`
  - `https://developer.microsoft.com/en-us/reactor/?search=...`
  - `https://resources.github.com/copilot-fridays-english-on-demand/`

## Reference

- [Events Formatting](references/events-formatting.md) - Table specs, category mapping, timezone rules
- [Benchmark Example](examples/) - Known-good Dec 2025 events

## Done When

- [ ] Event-source artifact exists at `workspace/newsletter_phase2_event_sources_*.json`
- [ ] Events file exists at `workspace/newsletter_phase2_events_*.md`
- [ ] All provided URLs processed
- [ ] Virtual events in table format (date only, no times)
- [ ] In-person events in table format (`Date`, `Location`, `Event`)
- [ ] `## Behind the scenes` section present with short notes
- [ ] Canonical categories only (Copilot, GitHub Platform, Developer Experience, Enterprise)
- [ ] Standard content blocks included (Copilot Fridays, YouTube playlists)
- [ ] Event count floor met for date range
- [ ] At least one Reactor-sourced event included when Reactor has in-range enterprise events
- [ ] No raw URLs in output

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/briancl2) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

