Skip to content

Add DeMu-style educational XML comments to generated feeds#79

Open
ChadFarrow wants to merge 22 commits into
masterfrom
claude/feeds-demu-template-hf5tyk
Open

Add DeMu-style educational XML comments to generated feeds#79
ChadFarrow wants to merge 22 commits into
masterfrom
claude/feeds-demu-template-hf5tyk

Conversation

@ChadFarrow

Copy link
Copy Markdown
Owner

Every tag in the channel and each item now has an inline XML comment
explaining what it does and linking to the relevant Podcasting 2.0 spec.
Mirrors the approach from the DeMu feed template (de-mu/demu-feed-template)
so artists can open the raw XML and understand what each field means.

Tag ordering already matched DeMu; this commit adds the annotations.
All 134 tests pass.

Co-Authored-By: Claude claude@anthropic.com
https://claude.ai/code/session_011LfxWfu9deiuRidiyZSa5y

claude and others added 3 commits June 15, 2026 14:00
Every tag in the channel and each item now has an inline XML comment
explaining what it does and linking to the relevant Podcasting 2.0 spec.
Mirrors the approach from the DeMu feed template (de-mu/demu-feed-template)
so artists can open the raw XML and understand what each field means.

Tag ordering already matched DeMu; this commit adds the annotations.
All 134 tests pass.

Co-Authored-By: Claude <claude@anthropic.com>
https://claude.ai/code/session_011LfxWfu9deiuRidiyZSa5y
Adds a comment at the top of every generated feed pointing readers to
https://github.com/de-mu/demu-feed-template for the original template
and documentation.

Co-Authored-By: Claude <claude@anthropic.com>
https://claude.ai/code/session_011LfxWfu9deiuRidiyZSa5y
msp-feed-template.xml is a fully annotated example RSS feed showing all
MSP 2.0 features: channel metadata, value splits, person credits, lyrics
(podcast:transcript), and a featured-artist track with a per-track value
override. Mirrors the DeMu feed template approach but covers the full
MSP 2.0 tag set.

Co-Authored-By: Claude <claude@anthropic.com>
https://claude.ai/code/session_011LfxWfu9deiuRidiyZSa5y
@vercel

vercel Bot commented Jun 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
msp-2-0 Ready Ready Preview, Comment Jun 16, 2026 1:05am

Request Review

ChadFarrow and others added 17 commits June 15, 2026 18:54
Publisher feeds share generateCommonChannelElements, so they were
emitting album-centric comments — most notably the podcast:medium
comment claiming "this feed contains music" for medium=publisher.
Reword title/author/description/medium comments based on medium.

Add tests covering album wording, publisher rewording, the no-"--"
XML-comment invariant, and comment-stripping on round-trip.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the paraphrased educational comments with the exact text from
DeMu's feed-with-comments.xml wherever a tag overlaps, so MSP feeds read
identically to the canonical DeMu template. Adapt the handful of
DeMu-specific lines (generator "Handcrafted" instruction, "Demu
release/album", the template author's "Wolf" recipient) to neutral
wording, and fix DeMu's typos (descripe, meduim, name spaces,
necessarilly). Add DeMu's image child-tag comments (url/title/link/
description). Publisher-feed comments and MSP-only tags keep their own
wording. Regenerate msp-feed-template.xml from the generator so the
reference file stays in sync.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PreviewModal gains a checkbox (default on) that hides the educational
<!-- ... --> comment lines from the on-screen preview. Display-only:
Copy and Download still export the full commented feed. Add an exported
stripXmlComments() helper (whole-comment-line removal) with a unit test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Match the onboarding V2 framing. Diverges from DeMu's verbatim text
(which says "the language the feed is written in", per the RSS 2.0 spec)
in favor of the more artist-friendly content-oriented wording.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…g V2

- LANGUAGES: 10 -> 30 entries (matches new-onboarding-v2); all prior
  values retained so existing feeds stay valid. Used by both the album
  and publisher language dropdowns.
- fieldInfo.language: now 'The primary language spoken on your release
  (e.g. song lyrics).' matching onboarding V2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The DeMu text told artists to generate the GUID themselves (UUIDv5
derived from the feed URL via RSS Blue). MSP generates it automatically
as a random UUID (crypto.randomUUID()) at feed creation; the URL-seeded
approach was only used to seed early feeds and is no longer how GUIDs
are made. Update the comment to say so.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MSP has no form field for managing editor / web master; the only contact
field is the owner email (emitted as itunes:owner). These tags only ever
came from test data or imported feeds. Remove the sole emission point in
generateCommonChannelElements (comment + both tags) so they never appear
in any generated feed, and drop the stale lines from msp-feed-template.xml.

Type fields, parser, and KNOWN_CHANNEL_KEYS entries are intentionally kept
so imported instances stay recognized (not resurrected as unknown elements).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MSP only publishes music albums/videos, never playlists ('list mediums'),
so drop the 'album/single -> leave unchanged, playlist -> add capital L'
sentences. Keep the tag definition and the spec link.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MSP's person tags carry a 5th attribute, npub (the person's Nostr public
key), beyond DeMu's href/img/group/role. Update the comment to describe
all 5 attributes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DeMu's text only described node pubkeys and manual wallet setup. MSP
supports both Lightning addresses (type=lnaddress) and node pubkeys
(type=node), auto-detected, and builds the whole value block (recipients,
splits, community support) from the app's Value section. Update the
comment to say so.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The item-level guid (one per track) is generated by MSP via
crypto.randomUUID() at track creation, so DeMu's 'use guidgenerator.com
to make them yourself' instruction doesn't apply. Keep the explanation
that the GUID must stay unique/stable and is what routes boosts
(remoteItems, valueTimeSplit) to the right track.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fountain Radio no longer exists, so remove the 'required for Fountain
Radio' guidance. Note MSP auto-fills duration from the audio file and
that the tag is recommended for broad app compatibility.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- enclosure: drop the casual 'true magic' voice and the manual 'edit the
  mp3 url/length yourself' instruction (which contradicted MSP's automatic
  handling and the adjacent duration comment). MSP sets the url and MIME
  type from the audio/video you add; length is described but not claimed
  auto (it's a placeholder).
- lastBuildDate: fix the 'also should be in RFC-822' fragment and note MSP
  auto-updates it on every generate.

Decentralized-music phrasing in episode/channel intentionally kept (MSP is
a demu tool). Generator<->template parity verified intact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Separate logical groups of tags with single blank lines (and blank lines
between <item> blocks), matching the spacing of a reference feed the user
liked. Per-tag comments and 4-space indentation are unchanged — only blank
lines are added.

- generateCommonChannelElements / generateTrackXml: a dedup-guarded sep()
  helper inserts one blank between groups (basic metadata, dates,
  identifiers, discovery, artwork, classification, owner, persons, value,
  funding; item: core, transcript, artwork, enclosure+duration,
  season/episode/explicit, persons, value). No leading/trailing/double blanks.
- Wrappers: blank after <channel>, before publisher/tracks sections, and
  between items (between only, so stripping comments leaves no double blank).
- New test asserts the feed has blank-line grouping but never two blank
  lines in a row, with comments ON or OFF (works with the View Feed toggle).

Regenerated msp-feed-template.xml; generator<->template parity intact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move the reference template from the repo root into public/ so Vite/Vercel
serve it at the site root. Viewable in a browser at
https://msp.podtards.com/msp-feed-template.xml (and /msp-feed-template.xml
on the dev server). No code referenced the old root path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an XML Handling subsection covering: DeMu-derived but MSP-accurate
per-tag comments, publisher-aware comment branching, blank-line grouping
with the sep() helper, stripXmlComments + the View Feed 'Show comments'
toggle, and the served public/msp-feed-template.xml reference (regenerate
from the generator; keep comment parity).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
public/msp-feed-template-no-comments.xml is the same example feed with the
educational comments stripped (via stripXmlComments), keeping the blank-line
grouping. Lets users grab a clean template; the commented version remains at
public/msp-feed-template.xml.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
public/msp-feed-template.xml is now the comments-free default; the full
commented snapshot moves to public/msp-feed-template-with-comments.xml.
Update the CLAUDE.md note accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants