feat(works): public Related Works registry with moderated issue-form submissions - #22
Merged
Merged
Conversation
…submissions Others can now add works engaging The Interdependent Way: - .github/ISSUE_TEMPLATE/related-work.yml — structured public submission form (title, creator, https link, type, relation, description, rights consent); applies the related-work label. - scripts/fetch-works.mjs — build-time fetch of issues carrying both related-work and approved labels from this repo via the allowlisted GitHub API; parses issue-form bodies, validates fail-closed with visible exclusions, writes generated/works.json plus a last-known-good snapshot; OFFLINE=1 uses the snapshot. Moderation is the label pair: add approved to publish, remove to delist. - /works/ page — registry with attribution, per-work issue provenance, the no-endorsement/no-status-transfer boundary, submission instructions (issue form + email fallback), and visible gaps for approved-but-invalid entries. - Nav link, refresh:works wired into refresh:data and prepare-tests, docs/related-works.md, and tests/works-registry.test.mjs (parser, validator, moderation gating, generated-dataset schema). npm test: 24 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E93Rxmrs8bXHtWjD7z94bi
The registry displays bibliographic metadata and outbound links only; it never stores, copies, or embeds submitted works. States this on the /works/ page with a takedown contact, in the issue form intro, and in the strengthened rights/responsibility consent checkbox; docs/related-works.md records the hard rules (no uploads, no mirrors, no embeds) and the label-based takedown flow. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E93Rxmrs8bXHtWjD7z94bi
…never copies Corrects the posture: works ARE displayed on the page (image, audio, PDF, and allowlisted video/audio embeds), with the visitor's browser loading them directly from the creator's own hosting at view time. The site stores only metadata and the pointer — no copies, ever. Optional 'Display source' field on the submission form; fail-closed derivation (https-only; direct file extensions or the deliberate IFRAME_EMBED_HOSTS allowlist); works without a valid display source list as metadata + link. Boundary text, docs, and tests updated (25 pass). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E93Rxmrs8bXHtWjD7z94bi
29 hosts grouped by medium — video (YouTube, Vimeo, Dailymotion, Twitch, Rumble, Odysee, Streamable, Loom, TED), audio/music/podcasts (SoundCloud, Bandcamp, Spotify, Apple Music/Podcasts, Mixcloud, Audiomack, Podbean), documents/archives/slides (archive.org, Google Docs, OneDrive, Issuu, Scribd, SlideShare), code/interactive/3D (CodePen, CodeSandbox, JSFiddle, itch.io, Sketchfab). Submitters can request missing platforms in their submission; adding one is a one-line reviewed change. 25 tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E93Rxmrs8bXHtWjD7z94bi
erinepshovel-code
marked this pull request as ready for review
July 29, 2026 12:31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Gives others a way to add works related to The Interdependent Way, displayed on the site but never hosted by it — with the maintainer as the moderation gate and zero new infrastructure. Same architecture as the canon/textbook fetchers: public submissions land as structured GitHub issues, approval is a label, the static build fetches metadata and renders.
Display, not host. Works appear inline on
/works/— images, audio, PDFs, and video/audio embeds — but the visitor's browser loads every byte directly from the creator's own hosting at view time. The site stores only submitted metadata and the pointer; no copies are ever made or served. Works without a display source list as metadata plus an outbound link.Flow
.github/ISSUE_TEMPLATE/related-work.yml): title, creator, https link, type, relation, description, optional display source (direct image/audio/PDF file URL, or an embed URL from the allowlisted hosts: YouTube, Vimeo, Bandcamp, SoundCloud, archive.org), optional license, and a rights/responsibility consent checkbox. Auto-labelsrelated-work. Email fallback for non-GitHub submitters.approvedto publish; removing a label delists. Labels are the single switch.scripts/fetch-works.mjs(inrefresh:data+prepare-tests) fetches doubly-labeled issues, parses issue-form bodies, validates fail-closed (https-only; display sources must derive to image/audio/pdf or an allowlisted iframe host —IFRAME_EMBED_HOSTSis a deliberate, documented allowlist since each entry means third-party script on the page). Invalid-but-approved submissions surface as visible gaps.OFFLINE=1uses the last-known-good snapshot./works/renders inline displays (lazy, no-referrer, sandboxed iframes) with a per-work "displayed from the creator's own hosting" note, attribution, issue provenance, submission instructions, takedown contact (delisting on next build; no copy remains because none was made), and the boundary: listing is moderation, not review — no endorsement, no status transfer, canon and research ledgers untouched.Testing:
npm test— 25 passed (5 new: parser, validator, display derivation, moderation gating, dataset schema). Direct Eleventy render verified.Post-merge manual step: create the
approvedlabel (therelated-worklabel auto-creates on first submission).🤖 Generated with Claude Code
https://claude.ai/code/session_01E93Rxmrs8bXHtWjD7z94bi