Content Refresh
Turn Microsoft Developer Changelog entries into a small, reviewable update plan for an existing tech talk. This workflow updates existing content; it does not use the greenfield Tech Talk Generator research brief.
Cheap path (default)
Most refreshes are README wording. Do not start a cross-model recipe review or wipe the deck unless the evidence forces it.
| Highest accepted impact |
Recipe |
Slides |
Cross-model review |
reference + slideImpact: none |
leave recipe |
leave deck |
no |
content + recipeImpact: none|confirm + slideImpact: none|patch |
date/wording only, no review |
patch existing slides or skip |
no |
content + recipeImpact: revise or slideImpact: regenerate |
compact recipe refresh |
targeted regen or patch |
Rubber Duck gate only if recipe fields change |
structural, any headline, recipeImpact: restructure, or slideImpact: replace-demo |
full recipe refresh |
full deck regen |
Rubber Duck gate required |
Never treat an empty 7-day feed report or an empty ledger as "this talk is current."
Inputs
- Talk path:
tech-talks/<topic>/
- Feed:
https://developer.microsoft.com/api/changelog/rss
- Optional cutoff date. If omitted, use the README
updated date.
- Optional user emphasis, such as "call out BYOK and open source models."
- Ledger is optional. A named-talk request proceeds from the README cutoff even when
.github/content-routing/ledger.json has no proposal-created items.
Discovery
- Run
npm run content:route -- --since <cutoff> from the repo root. Default LOOKBACK_DAYS=7 is too short for a talk last updated more than a week ago.
- Read
latest-report.md as a hint, not a gate.
- Also check the talk's first-party product sources newer than the cutoff. For Copilot CLI that is the CLI command reference, github/copilot-cli releases, and the weekly GitHub changelog posts. Do not stop at the Microsoft Developer Changelog.
- Fetch each first-party URL once; retry once on network failure; then proceed with whatever sources succeeded. Do not loop on
fetch_webpage.
Source Policy
The feed is the discovery and routing source. The linked first-party release notes or documentation are the factual source of truth.
For every candidate announcement:
- Read the feed metadata and linked source.
- Confirm exact behavior, release status, availability, settings, commands, limitations, and dates from first-party material.
- Exclude adjacent product news unless it materially changes this talk's subject.
- Treat future-dated, duplicate, malformed, or contradictory feed entries as anomalies. Record them; do not promote them into content without confirmation.
Pre-Flight
- Confirm
tech-talks/<topic>/README.md exists and is not archived.
- Read the README frontmatter and major section markers.
- Read
deck.recipe.yml when present to understand current editorial intent.
- Read relevant Workbench topic coverage maps when the update touches a cross-cutting topic.
Triage
Assign each verified candidate:
headline: Changes the talk's thesis, a major workflow, or the primary demo.
supporting: Strengthens or updates an existing section without changing the thesis.
reference: Updates status, availability, wording, or evidence only.
ignore: Relevant to GitHub Copilot broadly but not to this talk.
Assign one update level for the talk:
reference: References or status only. No recipe review or slide regeneration.
content: README content changes fit the existing narrative. Patch the deck or leave it unless a slide claim is now false.
structural: The thesis, section order, weighting, highlights, or demo changes. Full recipe review and deck regen.
Escalate to structural when any headline item changes the operating model, replaces a centerpiece demo, or invalidates a recipe highlight.
Set recipeReview.required: true only for structural, recipeImpact: restructure, or slideImpact: replace-demo. Otherwise false.
Prefer slideImpact: patch when an existing slide already names the feature and only copy/status must change. Use regenerate only when the recipe or section skeleton must change. Use none when the deck already states the fact.
Output
Create or overwrite tech-talks/<topic>/content.refresh.yml using CONTENT-REFRESH-TEMPLATE.yml from this skill folder. If the file already exists, edit it in place — create_file fails on an existing path.
The plan must:
- Cover entries newer than the cutoff through the feed's
lastBuildDate.
- Separate additions, replacements, removals, and ignored items.
- Map every accepted change to a current or proposed README section.
- State recipe impact and slide/demo impact explicitly.
- Preserve source URLs and verified dates.
- Include anomalies and unresolved facts.
- End in
status: proposed until the user approves it.
Present a concise summary and wait for approval before editing the README. A direct user instruction to apply a plan counts as approval; set status: approved and record the approval date before content edits.
Apply an Approved Plan
- Set
refresh.status: approved and refresh.approved: YYYY-MM-DD before editing the README.
- Patch the README as a reader-first technical article. Do not append a changelog dump.
- Update frontmatter
updated and verified references.
- Preserve unrelated material and working artifacts unless the plan replaces them.
- Follow the cheap-path table. Do not invoke cross-model recipe review or wipe
slides/tech-talks/<slug>.md for confirm/patch work.
- If
recipeReview.required is true, invoke deck-recipe-refresh.
- If
slideImpact is patch, edit the existing deck in place and run a single-deck build. If regenerate or replace-demo, invoke the Tech Talk Slide Generator only after the recipe is settled.
- One network or subagent failure: retry once, then continue with local files. Do not regenerate the same deck twice because a fetch failed.
Quality Gate
- Every accepted claim has a first-party source.
- Preview, GA, experimental, deprecated, and retired states remain explicit.
- The README still answers one clear question.
- New material displaces stale or lower-value content rather than only increasing length.
- Cross-talk candidates are routed in
ignored or relatedTalks; they are not silently lost.
1---2name: content-refresh3description: Use when refreshing existing tech talks from the Microsoft Developer Changelog feed. Produces an evidence-backed content.refresh.yml that maps relevant announcements to README changes and recipe-review impact. Triggers: refresh content, changelog update, feed update, latest news, content refresh plan. Named-talk refresh continues even when the ledger has no proposal-created items.4---56# Content Refresh78Turn Microsoft Developer Changelog entries into a small, reviewable update plan for an existing tech talk. This workflow updates existing content; it does not use the greenfield Tech Talk Generator research brief.910## Cheap path (default)1112Most refreshes are README wording. Do not start a cross-model recipe review or wipe the deck unless the evidence forces it.1314| Highest accepted impact | Recipe | Slides | Cross-model review |15|---|---|---|---|16| `reference` + `slideImpact: none` | leave recipe | leave deck | no |17| `content` + `recipeImpact: none\|confirm` + `slideImpact: none\|patch` | date/wording only, no review | patch existing slides or skip | no |18| `content` + `recipeImpact: revise` or `slideImpact: regenerate` | compact recipe refresh | targeted regen or patch | Rubber Duck gate only if recipe fields change |19| `structural`, any `headline`, `recipeImpact: restructure`, or `slideImpact: replace-demo` | full recipe refresh | full deck regen | Rubber Duck gate required |2021Never treat an empty 7-day feed report or an empty ledger as "this talk is current."2223## Inputs2425- Talk path: `tech-talks/<topic>/`26- Feed: `https://developer.microsoft.com/api/changelog/rss`27- Optional cutoff date. If omitted, use the README `updated` date.28- Optional user emphasis, such as "call out BYOK and open source models."29- Ledger is optional. A named-talk request proceeds from the README cutoff even when `.github/content-routing/ledger.json` has no `proposal-created` items.3031## Discovery32331. Run `npm run content:route -- --since <cutoff>` from the repo root. Default `LOOKBACK_DAYS=7` is too short for a talk last updated more than a week ago.342. Read `latest-report.md` as a hint, not a gate.353. Also check the talk's first-party product sources newer than the cutoff. For Copilot CLI that is the [CLI command reference](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference), [github/copilot-cli releases](https://github.com/github/copilot-cli/releases), and the weekly GitHub changelog posts. Do not stop at the Microsoft Developer Changelog.364. Fetch each first-party URL once; retry once on network failure; then proceed with whatever sources succeeded. Do not loop on `fetch_webpage`.3738## Source Policy3940The feed is the discovery and routing source. The linked first-party release notes or documentation are the factual source of truth.4142For every candidate announcement:43441. Read the feed metadata and linked source.452. Confirm exact behavior, release status, availability, settings, commands, limitations, and dates from first-party material.463. Exclude adjacent product news unless it materially changes this talk's subject.474. Treat future-dated, duplicate, malformed, or contradictory feed entries as anomalies. Record them; do not promote them into content without confirmation.4849## Pre-Flight50511. Confirm `tech-talks/<topic>/README.md` exists and is not archived.522. Read the README frontmatter and major section markers.533. Read `deck.recipe.yml` when present to understand current editorial intent.544. Read relevant Workbench topic coverage maps when the update touches a cross-cutting topic.5556## Triage5758Assign each verified candidate:5960- `headline`: Changes the talk's thesis, a major workflow, or the primary demo.61- `supporting`: Strengthens or updates an existing section without changing the thesis.62- `reference`: Updates status, availability, wording, or evidence only.63- `ignore`: Relevant to GitHub Copilot broadly but not to this talk.6465Assign one update level for the talk:6667- `reference`: References or status only. No recipe review or slide regeneration.68- `content`: README content changes fit the existing narrative. Patch the deck or leave it unless a slide claim is now false.69- `structural`: The thesis, section order, weighting, highlights, or demo changes. Full recipe review and deck regen.7071Escalate to `structural` when any `headline` item changes the operating model, replaces a centerpiece demo, or invalidates a recipe highlight.7273Set `recipeReview.required: true` only for `structural`, `recipeImpact: restructure`, or `slideImpact: replace-demo`. Otherwise `false`.7475Prefer `slideImpact: patch` when an existing slide already names the feature and only copy/status must change. Use `regenerate` only when the recipe or section skeleton must change. Use `none` when the deck already states the fact.7677## Output7879Create or overwrite `tech-talks/<topic>/content.refresh.yml` using `CONTENT-REFRESH-TEMPLATE.yml` from this skill folder. If the file already exists, edit it in place — `create_file` fails on an existing path.8081The plan must:8283- Cover entries newer than the cutoff through the feed's `lastBuildDate`.84- Separate additions, replacements, removals, and ignored items.85- Map every accepted change to a current or proposed README section.86- State recipe impact and slide/demo impact explicitly.87- Preserve source URLs and verified dates.88- Include anomalies and unresolved facts.89- End in `status: proposed` until the user approves it.9091Present a concise summary and wait for approval before editing the README. A direct user instruction to apply a plan counts as approval; set `status: approved` and record the approval date before content edits.9293## Apply an Approved Plan94951. Set `refresh.status: approved` and `refresh.approved: YYYY-MM-DD` before editing the README.962. Patch the README as a reader-first technical article. Do not append a changelog dump.973. Update frontmatter `updated` and verified references.984. Preserve unrelated material and working artifacts unless the plan replaces them.995. Follow the cheap-path table. Do not invoke cross-model recipe review or wipe `slides/tech-talks/<slug>.md` for confirm/patch work.1006. If `recipeReview.required` is true, invoke `deck-recipe-refresh`.1017. If `slideImpact` is `patch`, edit the existing deck in place and run a single-deck build. If `regenerate` or `replace-demo`, invoke the Tech Talk Slide Generator only after the recipe is settled.1028. One network or subagent failure: retry once, then continue with local files. Do not regenerate the same deck twice because a fetch failed.103104## Quality Gate105106- Every accepted claim has a first-party source.107- Preview, GA, experimental, deprecated, and retired states remain explicit.108- The README still answers one clear question.109- New material displaces stale or lower-value content rather than only increasing length.110- Cross-talk candidates are routed in `ignored` or `relatedTalks`; they are not silently lost.