Phase 1 Talk Automation Policy
Phase 1 Talk Automation Policy
This document defines the Phase 1 policy for automatically finding talks while minimizing false positives for common names.
Goal
Use external web sources to discover talk candidates, then publish only verified talks after scoring and review.
Pipeline states:
candidate- scraped from trusted sources, not publishedverified- high confidence identity match, publishablepublished- rendered on site after PR merge
Data Files
_data/talk_sources.yml- trusted source registry_data/talk_identity.yml- name, affiliation, coauthor, topic, and negative filters_data/talk_candidates.yml- discovered candidates + score metadata_data/talks.yml- verified canonical talks used by website pages
Scoring Rubric
Each candidate receives a confidence score based on positive and negative signals. Name-only matches are not enough.
Positive signals
+60exact speaker name match with one configured name variant+20weak name variant match (e.g. initials or ASCII fallback)+18affiliation match (MPI MiS,RWTH Aachen,TU Berlin)+10coauthor name match (max+20)+8topic keyword match (max+24)+10source domain is trusted
Negative signals
-30negative topic keyword match (medicine,law,biology,finance,math bio)-45disambiguation red flag (Johannes Muller+TUM+math biocontext)
Bucket thresholds
score >= 70:highconfidence -> auto-verified candidate45 <= score < 70:mediumconfidence -> manual review requiredscore < 45:lowconfidence -> rejected (kept in report)
Hard safety rule
- If candidate metadata contains
TUM, it is always treated asmanual review only. - If such a candidate scores
high, it is downgraded tomediumfor explicit review.
Deduplication
Candidates are deduplicated by canonical key:
- normalized date (
YYYY-MM-DDorYYYY-MM) - normalized title
- normalized venue
If duplicates conflict, keep the entry with:
- higher confidence score
- richer metadata (URL, location, description)
- source priority (trusted source order)
Publish Rules
- Only
_data/talks.ymlis used for public rendering. typeis not shown on website output.- Month/year dates are allowed and rendered as month/year.
- Online talks are included.
- No auto-merge or direct publish; PR review is always required.
Weekly PR Checklist
For each automation PR, review these sections:
- New
highconfidence talks proposed for_data/talks.yml mediumconfidence candidates that need your approve/reject decision- Rejected
lowconfidence candidates and reasons - Duplicates merged and source links preserved
- Broken/missing URLs
Operator Runbook
Current manual run command:
python3 markdown_generator/score_talk_candidates.py
The script reads candidates and writes a review report. No public files are changed unless a write flag is explicitly used.
Fetch + score sequence:
python3 markdown_generator/fetch_talk_candidates.py
python3 markdown_generator/score_talk_candidates.py --write-candidates
Your Responsibilities
- Keep trusted source registry up to date over time.
- Review weekly PRs and decide on medium-confidence candidates.
- Merge approved PRs.
- Add occasional manual corrections in canonical data if needed.
Information Still Needed From You
- 5-15 specific event or seminar page URLs (not just broad homepages) to improve fetch precision.
- Whether talks at TUM should always be treated as manual-review-only by default.
First-Time Setup (What You Need To Do)
- Add Python dependency locally:
python3 -m pip install pyyaml
- Run fetch + score:
python3 markdown_generator/fetch_talk_candidates.py
python3 markdown_generator/score_talk_candidates.py --write-candidates
- Inspect report:
docs/automation/talk-candidate-review.md
- If source fetch success is low, add more specific event URLs to
_data/talk_sources.yml.
Current Limitations
- Some websites block simple crawlers; this may produce
fetch_failedstats. - Broad source domains can be noisy; precision improves as source registry gets more specific.
- Candidate-only mode is enabled. No public talks pages are generated yet from this pipeline.
Rendering talks onto the website
_data/talks.yml is the single source of truth for the Talks section of _pages/activities.md. The section is generated:
python3 markdown_generator/render_talks.py # write
python3 markdown_generator/render_talks.py --check # fail if out of date
python3 markdown_generator/test_talks.py # offline tests
Everything between <!-- talks:begin --> and <!-- talks:end --> on the activities page is overwritten on every run – edit _data/talks.yml, never the block. The rest of the page (poster presentations, conferences, reviewing, organization) stays hand-written.
Rendered entry: * <Month Year>: *<title>*, [<venue>](<url>), <location>. Title, url, location and note are optional; only entries with status: verified or status: published appear. Sorting is newest first; a month-precision date sorts after the dated talks of the same month.
To publish a discovered candidate: copy it from _data/talk_candidates.yml into _data/talks.yml, set status: verified, run the renderer.
The CI workflow .github/workflows/talk-candidate-pipeline.yml runs the tests, fetches and scores candidates, re-renders the page and opens a PR.
