Publish the current R Weekly draft as a new weekly post. Use when an editor invokes /release or asks to "release", "publish", or "create the weekly post" from draft.md. Validates the draft before creating the file in _posts/.
Installs into .claude/skills of the current project.
Are you the author of Release?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/rweekly-release)
---
name: release
description: Publish the current R Weekly draft as a new weekly post. Use when an editor invokes /release or asks to "release", "publish", or "create the weekly post" from draft.md. Validates the draft before creating the file in _posts/.
disable-model-invocation: true
allowed-tools: Read, Write, Bash
---
# R Weekly Release
Publish `draft.md` as a new weekly issue in `_posts/`. Run pre-flight checks first — stop if any fail.
## Pre-flight Checks
Read `draft.md` and verify all three conditions. Report every failure found before stopping.
### Check 1: Non-empty Highlight section
The `### Highlight` section must contain at least one content line (a line starting with `+`, `*`, or `-`). If it is empty, report: "FAIL: ### Highlight section is empty. Editors must add content before releasing."
### Check 2: No empty sections
Every `### SECTION` block must have at least one non-blank line of content before the next `###` or end of file. A line is "content" if it is not blank and does not start with `###`.
List every empty section found. Report: "FAIL: The following sections are empty: [list]. Remove them or add content before releasing."
> Note: sections with only boilerplate HTML (like the CRANberries link in New Packages or the podcast link in Videos and Podcasts) count as non-empty — they have content lines.
### Check 3: At least 3 images
Count lines containing either a Markdown image `` or an HTML `<img` tag in the draft body (not the front matter). If fewer than 3, report: "FAIL: Only N image(s) found. At least 3 are required."
If **any check fails**, stop and show all failures. Do not create the post file.
### Check 4: Duplicate links (advisory — editor decides)
Run the duplicate checker:
```bash
Rscript -e 'source("scripts/find_duplicates.R"); get_dups()'
```
This compares draft.md links against the last ~20 published posts. **Do not hard-fail on duplicates** — present the results to the editor for a judgment call. Some duplicates are intentional and fine to keep:
- Recurring events, conferences, and meetup listings
- Standing resources (workshops, community links)
- Anything the editor explicitly wants to repeat
Report any duplicates found as a warning:
```
⚠ Possible duplicates found (review before releasing):
- [Title](URL) — also in 2026-W23
- [Title](URL) — also in 2026-W21
These may be intentional. Remove or keep as appropriate.
```
If no duplicates are found, say so and continue. Either way, **wait for the editor to confirm before proceeding to release.**
---
## Creating the Release
If all checks pass and the editor has confirmed, proceed:
### Step 1: Compute date and week
Run in Bash:
```bash
echo "DATE=$(date +%Y-%m-%d)" && echo "YEARWEEK=$(date +%G-W%V)"
```
This gives you e.g. `DATE=2026-03-09` and `YEARWEEK=2026-W11`.
### Step 2: Summarize the Highlight section
Read the items listed under `### Highlight`. Write a short, natural-language summary of the highlights — typically 2–3 comma-separated phrases drawn from the article titles. Use title case. Capture the actual topic, not just the tool name.
Look at recent post titles for the style:
- `R Version Update, Refactoring, Your Tests Lie to You`
- `Building a computer, Toolbars, Memory model`
- `15 Years of rOpenSci, Durations of wars, and R-squared`
- `S at 50, targets vs dbt`
Keep each phrase short (1–4 words). Avoid padding words like "and", "the", "a" unless they're part of the title. Do not use all-lowercase bare words.
### Step 3: Build the filename
```
_posts/DATE-YEARWEEK.md
```
Example: `_posts/2026-03-09-2026-W11.md`
### Step 4: Compose the post
The post consists of:
1. A new front matter block (do NOT copy the draft's front matter):
```
---
title: R Weekly YEARWEEK WORD1 WORD2 WORD3
description: Weekly News in the R Community
image: https://rweekly.org/public/facebook.png
---
```
2. The body of `draft.md` — everything after the closing `---` of its front matter, exactly as-is.
### Step 5: Write the file
Use the Write tool to create `_posts/DATE-YEARWEEK.md` with the composed content.
### Step 6: Reset the draft
Read `for-editor-only-draft.txt` and overwrite `draft.md` with its contents, but update the title with the next week number. For example, if you just released `2026-W15`, change the title from `R Weekly 2026-W00` to `R Weekly 2026-W16` before writing.
### Step 7: Confirm
Tell the editor:
- The filename created
- The title used
- A one-line summary of what the Highlight section contains