Way Into AI weekly roundup

Produces one issue file, weekly/YYYY-wWW.md, for human review. It does not send, schedule, or touch the CRM; sending is a separate step (bead wayintoai-94n.2, run from ~/src/life-itself/crm) that starts only from an approved file.

Read before drafting: docs/brand.md (voice, promise, issue structure) and "Featuring and newsletter selection" in the repo SKILL.md (the flags this skill reads).

Conventions

WhatRule
Send dayTuesday. Draft ready for review on Monday.
Week numberISO 8601 week of the send date: date -j -f %F 2026-09-29 +%G-W%V → 2026-W40.
Fileweekly/<ISO year>-w<week>.md, e.g. weekly/2026-w40.md. Site URL https://wayintoai.com/weekly/2026-w40.
SubjectThe hook only: the lead item as a short, true claim, e.g. Opus 5.5: top-tier AI for 40% less. ≤ 50 characters, no emoji or glyphs, no brand, no issue number. This follows common newsletter practice: the sender name (Way Into AI) carries the brand, the subject earns the open. Don't reuse a hook shape from recent issues (rg -n '^subject:' weekly).
PreheaderStarts Week <N>. then names the other items (Also: …). Not a copy of the subject or description.
Site titleWhat mattered · week <N>.
Issue numberissue: = number of status: sent issues in weekly/ + 1.
WindowDay after the last sent issue's window_end through the day before drafting. Scheduled Monday run: previous Tuesday → Sunday. First issue: last 7 days, extended back to the oldest unsent flagged item if it is under 4 weeks old.
Statusstatus: draft → approved (human) → sent (94n.2 only).

One markdown file, two outputs

The same file is the site page and the email body, so the body must be plain CommonMark that renders the same in both:

  • Frontmatter is metadata only. The site uses title/description/date; the send step strips frontmatter and uses subject, preheader and the canonical URL.
  • No H1. Flowershow renders title; the email template renders the subject.
  • Absolute links only: https://wayintoai.com/ref/<slug>, https://wayintoai.com/posts/<slug> (no .md), or the external URL. No [[wiki links]], no relative paths, no MDX/HTML.
  • Images: at most one, absolute https:// PNG/JPG URL (e.g. https://wayintoai.com/assets/...); no SVG (Gmail drops it). Optional; email clients may block images.
  • No unsubscribe or footer text. The send step's template adds the canonical link and unsubscribe.
  • Link every item back to the site page first (the site is the notebook; the email is the edit), external source second if useful.

Approval and the content hash

The send step binds approval to a hash of the body (after frontmatter) plus subject and preheader. Changing status does not change the hash; any other edit to those after approval requires re-approval.

Frontmatter

---
title: "What mattered · week 40"
description: <one sentence for site listings and social cards>
date: 2026-09-29            # send date
week: 2026-W40
issue: 1
subject: "Opus 5.5: top-tier AI for 40% less"
preheader: "Week 40. Also: …"
status: draft
window_start: 2026-09-22
window_end: 2026-09-27
items:                      # every repo file the body links or draws facts from; 94n.2 marks these newsletter_sent
  - ref/claude-opus-5-5.md
try: ref/some-tool.md       # the "One thing to try" item (also listed in items)
---

Procedure

  1. Work out the issue. Send date = next Tuesday (today if Tuesday). Compute week, file path, issue number and window as above. If the file already exists and is not status: draft, stop and ask.

  2. Gather candidates (read-only):

    python3 .agents/skills/weekly-roundup/gather.py [--today YYYY-MM-DD] [--since YYYY-MM-DD] [--until YYYY-MM-DD]
    

    Pass --today on scheduled runs (the machine may be in UTC). It lists: flagged items (newsletter: weekly|standalone) not yet sent, whatever their date, with STALE on those over 4 weeks old; log newsletter_candidates in the window; new posts/refs in the window; the window's log headings; past try picks; undated refs. "Sent" means newsletter_sent on the item or listed in a sent issue's items:/try:. Then read every candidate file; never draft from titles.

  3. Select. Rank: our own posts (they carry our opinion) > flagged weekly > refs with the biggest consequences for someone using AI at work > other refs. Keep one canonical item per story (a post beats its ref), and one story gets at most one What mattered slot: fold follow-on angles into that item or into The bigger picture.

    • newsletter: standalone → include it in the weekly. A dedicated send is a separate decision the reviewer makes; don't ask about it in the draft.
    • STALE flagged items → ask, don't include by default.
    • What mattered: 3–5 developments. Thin week (fewer than 3 worth it): run 2 and say so in the opener, or add one archive item clearly labelled as such. Never pad.
    • One thing to try: one practical thing for people using AI: a tool, skill, workflow, prompt, or a useful guide or reference. Not policy or news. The homepage promises one every issue. Prefer this week's items; if none fits, draw from the archive: /use posts, refs with a "User Experience Note", ref/moc-best-ai-skills.md, guides and references. Don't repeat a past pick. Prefer something a generalist can start in ten minutes. Don't claim we use it unless the repo says so.
    • The bigger picture: one item or theme on work, power, policy or safety. Several related refs can be one paragraph.
    • From the log: up to 3 other worthwhile items, one line each. Leave out bookmarks we haven't tried and anything that is only "interesting". No firehose.
  4. Draft in house voice (docs/brand.md): first person plural, specific. This is a roundup, not new editorial: report what the sources say, and use only takes already recorded in our posts and refs. Don't add new inferences, predictions or opinions; when in doubt, cut the sentence. Say "we think", "we don't know yet". Concrete numbers and examples over adjectives; no hype, doom, jargon, or digest-speak ("In this week's roundup…", "exciting", "game-changer").

    • Headlines state the point as a plain claim. Never the "X, not Y" / "not X but Y" shape, and never the product name alone.
    • Items: what happened and why it matters, with our take only where a post or ref already states it. Vary the shape; five identical four-sentence paragraphs read like a digest. Keep claims no broader than the evidence (sample sizes, "vendor figures").
    • One thing to try ends with the exact first step (a command, a menu, a prompt) and how long it takes.
    • Opener: one or two sentences naming the week's thread. Issue 1 (or after a gap) also says what this email is, in one sentence.
    • Sign-off: invite replies ("Just reply to this email") and point to the log.
    • Every number, quote, date and take must come from a file in items:. Relative dates are from the send date ("on 1 September", not "three weeks ago").
    • Target 500–800 words.

    Body skeleton:

    <1–2 sentence opener>
    
    ## What mattered
    
    **<Headline that makes the point.>** <What happened. What we think it means.> [Read more](https://wayintoai.com/...)
    
    ## One thing to try
    
    **<Name, for <use>.>** <What it is, how we use it.>
    
    <First step, exactly.> [Read more](...)
    
    ## The bigger picture
    
    <One paragraph.>
    
    ## From the log
    
    - [<Title>](https://wayintoai.com/ref/...): <one line>
    
    <Reply invite.> The rest of what we log is at [wayintoai.com/logs](https://wayintoai.com/logs).
    
  5. Check before handing over:

    • rg -n '\[\[|\]\(\.\.?/|\.md\)' weekly/<file> returns nothing (no wiki or relative links).
    • Every https://wayintoai.com/... link maps to an existing ref/ or posts/ file, and every such file is in items:.
    • Every number, quote and "we think" traces to a file in items:.
    • Subject ≤ 55 chars and says nothing the body contradicts.
    • Tell pass: run Humanizer (/humanizer on the body) if installed, or check by hand for "X, not Y", rules of three, inflated importance, em-dash runs, filler.
    • Optional: have a sub-agent critique content (accuracy against sources, selection, voice) and fold in what holds up.
  6. Stop for approval. Do not commit, push, send, or change flags on source items. Report: file path, subject, word count, the selection with one-line reasons, what was left out and why, and review notes (CONFIRM items, takes that need the reviewer's view). The reviewer edits the file and sets status: approved; that is the only approval signal 94n.2 accepts.

Surfacing the Monday draft

Interactive run: the file in the working tree plus the report above. Scheduled run (Monday morning, not yet set up; bead wayintoai-94n.3): commit the draft to branch weekly/<yyyy>-w<ww>, open a PR titled Weekly draft: What mattered · week <N>, and create a bead Review weekly issue week <N> labelled who:rufus linking the PR. Merging the approved PR on Monday publishes the site page, so the canonical URL exists before Tuesday's send.