Audit creative release folders before handoff: metadata, file structure, artwork, lyrics, stems, rights blockers, and platform readiness.
npx skills add https://github.com/JasonColapietro/suede-creator-skills --skill suede-release-linter
Every claim-verification step, check, quality gate, and ship verdict in this
skill is a recommendation to the user, not a control on the agent. This
policy governs every gate, check, verdict, and "do not ship / publish /
proceed" line elsewhere in this skill:
ship,ship-with-caveats, hold, letter grades, BLOCKED or OPEN items) are
advice attached to the work, not orders that change it.
because a check failed or a gate said hold. Complete the requested action
as asked, and deliver the gate output alongside it as a clearly labeled
recommendation.
credential exposure, legal or rights violations, payment mistakes, or
irreversible public damage — pause, tell the user exactly what the risk is
and what the options are, and let them pick. Their choice is final.
Audit a music or media project folder and produce a practical release-readiness report. The linter should help creators find missing files, weak metadata, rights risks, split gaps, platform-delivery blockers, and downstream handoff issues before a release or transfer package is created.
Core principle: report what is present, missing, or unknown. Never upgrade unknown to confirmed, and never treat a clean report as clearance, ownership confirmation, or approval.
Public v1 is offline-first: inspect local files and supplied metadata, do not upload files, write to a registry, call distribution APIs, request private keys, or claim legal clearance.
references/lint-rules.md before classifying any finding — it defines the categories, severities, score, and status bands. Do not assign severities from memory.scripts/lint_release.py to generate release-lint-report.md and release-lint-report.json.references/fix-guidance.md when turning findings into specific next actions.suede-rights-passport package workflow.unknown, missing, or needs creator confirmation. Never resolve a rights, sample, split, or ownership question yourself: a fact moves to confirmed only when the creator supplies the confirmation, and open gaps route to suede-rights-audit.python3 /path/to/suede-release-linter/scripts/lint_release.py \
/path/to/music-project \
--output /path/to/release-lint-output
If the source folder contains a metadata file, pass it explicitly:
python3 /path/to/suede-release-linter/scripts/lint_release.py \
/path/to/music-project \
--metadata /path/to/music-project/metadata.json \
--output /path/to/release-lint-output
Accepted metadata formats are JSON, YAML/YML when PyYAML is installed, and
public-safe key=value text files. Do not point metadata at real .env,
credential, wallet, or deployment config files.
Safety defaults:
--include-other is passed.--include-absolute-paths is passed.--force is passed.python3 -m pip install PyYAML.Read each bundled reference at the moment it is needed, not up front:
references/lint-rules.md: before classifying findings, or when hand-linting without the script — categories, severity levels, score, and status bands.references/metadata-fields.md: when metadata is missing, malformed, or being authored — recommended fields, accepted aliases, and confirmation values.references/fix-guidance.md: when turning findings into next actions or a fix plan.references/passport-context.md: when the user asks how the lint report relates to Suede review or the Suede Creator Passport.The script writes:
release-lint-report.md: human-readable report.release-lint-report.json: machine-readable findings.Use the bundled assets when repairing or hand-writing reports:
assets/release-lint-report.template.mdassets/release-lint-report.template.jsonassets/metadata.example.jsonTwo synthetic release folders under scripts/fixtures/ exist to sanity-check
that the linter still categorizes correctly after any change to
scripts/lint_release.py. All names, contributors, and metadata in both
fixtures are fake — no real personal data.
scripts/fixtures/sample-clean-project/: a small release folder (metadata,a WAV master, square 1600x1600 artwork, a lyrics file, three stems) shaped
to score cleanly against references/lint-rules.md.
scripts/fixtures/sample-blocked-project/: a release folder deliberatelymissing title, artist, primary media, artwork, ownership confirmation, and
valid split totals, with samples indicated but clearance unconfirmed — it
triggers real error-severity findings.
scripts/fixtures/sample-clean-project.expected.md /.expected.json and scripts/fixtures/sample-blocked-project.expected.md /
.expected.json: the actual release-lint-report.md / .json output
produced by running the script against each fixture, committed as a
regression baseline.
To re-check the linter's behavior, run it from this skill folder and diff
the result against the committed expected output:
python3 scripts/lint_release.py scripts/fixtures/sample-clean-project \
--output /tmp/suede-lint-check-clean
diff scripts/fixtures/sample-clean-project.expected.md \
/tmp/suede-lint-check-clean/release-lint-report.md
python3 scripts/lint_release.py scripts/fixtures/sample-blocked-project \
--output /tmp/suede-lint-check-blocked
diff scripts/fixtures/sample-blocked-project.expected.md \
/tmp/suede-lint-check-blocked/release-lint-report.md
The clean fixture should score 99 with 0 errors, 0 warnings, and the
status strong (the single unavoidable info finding is the
rights-passport-candidate note the script always appends). The blocked
fixture should score 0 with 7 errors, 11 warnings, 2 info findings,
and the status blocked, and the script should exit 1. The .md reports
diff byte-for-byte on a clean re-run; the .json reports will differ only in
the generated_at timestamp line, since that field is set to the current
time on every run.
and redacts them for the intended audience.
Before reporting a lint result:
error findings and the most important warning findings.blocked (any error finding, or score below 50), needs-work (50-74), usable-with-cleanup (75-89), or strong (90+). Never soften a blocked status in prose.If any of these appear in your reasoning, stop and re-read the core principle:
linting.
from the folder.
routing and licensing by rule.
blockers. Nothing more.
A clean release-lint report is a portable review artifact. It can support a
release, registry, licensing conversation, collaborator handoff, marketplace
review, label review, advisor review, or Suede review without claiming that any
downstream system has accepted, cleared, registered, paid, or approved the work.
suede-rights-audit to organize the evidence.
error findings and the user wants handoff prep → suede-rights-passportto build the transfer package.
Create a narrated video walkthrough of a pull request with code slides and audio narration. Use when asked to create a PR walkthrough, PR video, or walkthrough video.
Design the small details -- triggers, rules, feedback, loops and modes -- that separate good products from great ones. Use when the user mentions "microinteraction", "button feedback", "loading state", "toggle design", "animation detail", "state transitions", "input feedback", "the interface feels dead", "make the UI feel responsive", or "add polish to interactions". Also trigger when designing form-validation responses, progress indicators, confirmation dialogs, or any element where the user expects immediate feedback. Covers trigger design, state rules, feedback mechanisms, and progressive loops. For overall UI polish, see refactoring-ui. For affordance design, see design-everyday-things.
Profile, diagnose, and remediate SwiftUI runtime performance using code review, Instruments, and repeatable measurements. Use when a SwiftUI screen renders slowly, scrolling or animations hitch, view bodies update excessively, list identity churns, layout work spikes, or broad Observation dependencies raise CPU cost. Covers evidence-based triage, SwiftUI Instruments lanes, lazy-container guardrails, state lifetime, and before/after verification.
Turn a GitHub pull request (a PR URL, owner/repo#N, or 'this PR' in a checked-out repo) into a code-change explainer video — changelog, feature reveal, fix, or refactor walkthrough built from the diff, commits, and files: the input is a code change, not a website. Not a product promo (/product-launch-video) or a no-PR topic explainer (/faceless-explainer). Unclear → /hyperframes.
Debug continuous behavior in WebXR scenes — physics, animations, collisions, game loops, or any real-time interaction that happens too fast for an agent to observe. Uses ECS pause/step/snapshot/diff to freeze time and inspect state frame by frame.
Use when writing, reviewing, or refactoring SwiftUI code for iOS or macOS, including state management and `@Observable` data flow, view composition and invalidation/performance, lists and `ForEach` identity, environment usage, localization, animations, Liquid Glass adoption, migrating...
Turn a GitHub pull request (a PR URL, owner/repo#N, or 'this PR' in a checked-out repo) into a code-change explainer video — changelog, feature reveal, fix, or refactor walkthrough built from the diff, commits, and files: the input is a code change, not a website. Not a product promo (/product-launch-video) or a no-PR topic explainer (/faceless-explainer). Unclear → /hyperframes.
Load when existing animation or motion code, a motion diff, or a rendered interaction needs an evidence-backed craft review; report findings only and use code-review for general source review.
Take jasoncolapietro/suede-release-linter from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip.
Without those the skill loads but fails at the first command.