Skip to content
Back to skills

Release

ASecurity

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/.

  • 824 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 20, 2026
databashrefactoring

Security analysis

A100/100

Scanned September 20, 2026

npx -y skills add rweekly/rweekly.org --skill release --agent claude-code

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.

Security grade badge for Release
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rweekly-release/badge)](https://www.skillsdirectory.com/skills/rweekly-release)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…