Skip to content

refactor(songwriting): split pat-pattison mega-skill into concern skills#89

Merged
kyle-sexton merged 2 commits into
mainfrom
refactor/split-pat-pattison
Jul 12, 2026
Merged

refactor(songwriting): split pat-pattison mega-skill into concern skills#89
kyle-sexton merged 2 commits into
mainfrom
refactor/split-pat-pattison

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

What

Decompose the pat-pattison lyric-craft mega-skill (1 skill, 260-line router, 48 research + 16 templates) into eight concern-scoped skills, each a thin router over a shared reference corpus. The suno skill is unchanged.

New lyric-craft skills: workflow (start-here situation router + coaching), rhyme, object-writing, meter-prosody, song-form, co-write, diagnosis, daily-practice.

Design decisions

  • Shared reference corpus at plugin-root context/. The corpus is densely self-cross-linked (hub files referenced from every concern), so a naive per-skill file partition would break most links. Moving the whole corpus verbatim under context/pat-pattison/ preserves every intra-corpus link with zero rewriting. Precedent: prototype (context/discipline.md read by both skills), review-toolkit (context/severity.md).
  • Concern = skill; author/method = context namespace. Each concern skill is an author-neutral interface; Pat Pattison's method lives once under context/pat-pattison/. A future author's method for the same concern plugs in at context/<author>/ without changing the concern skills (open for extension, closed for modification).
  • /songwriting:pat-pattison is retired (no backward-compat constraint at this stage). /songwriting:workflow is the start-here router and carries the cross-skill routing index + Quick Decision Guide.

Content preservation

Corpus moved verbatim; drift-fixes applied only where needed (stale /pat-pattison <action> invocation strings remapped to /songwriting:<skill>, the datamuse.sh path corrected, action-routing.md reframed as a cross-skill index).

Hash audit vs origin/main: 53 corpus files byte-identical, 0 lost, 12 changed = exactly the intentional drift-fixes.

Verification (local)

  • lychee (offline, fragments on): 660 OK, 0 errors
  • markdownlint-cli2: 0 errors (100 files)
  • typos: clean
  • scripts/validate-plugins.sh: all manifests + catalog validate
  • All 8 new SKILL.md: valid frontmatter, required keys, user-invocable: true, name matches dir
  • EOL LF, datamuse.sh exec-bit preserved (100755)
  • marketplace.json untouched (within-plugin split)
  • Version bumped 0.1.0 -> 0.2.0; CHANGELOG.md added

Also updated the repo README catalog row and the planning:brainstorm cross-reference that pointed at the retired skill.

Refs melodic-software/medley#1395


Note

Medium Risk
Breaking skill invocations for anyone using /songwriting:pat-pattison; behavior should be equivalent if users adopt the new routes, but routing mistakes are possible until habits/docs catch up.

Overview
Breaking: Retires /songwriting:pat-pattison and replaces it with eight concern-scoped lyric-craft skills (workflow, rhyme, object-writing, meter-prosody, song-form, co-write, diagnosis, daily-practice). Each new skill is a thin action router with concern-specific response-filter pre-flight; /songwriting:workflow is the start-here orchestrator and hosts the cross-skill Quick Decision Guide. suno is unchanged.

The Pat Pattison reference corpus (research, templates, datamuse.sh, response filter) moves from under the old skill to context/pat-pattison/ as a shared, author-namespaced content layer. Adds artifact-persistence.md for shared file-layout rules; corpus links are updated from /pat-pattison actions to /songwriting:<skill> and the Datamuse script path.

Plugin 0.1.0 → 0.2.0 with a new CHANGELOG.md; README and root catalog describe the split. planning:brainstorm now points creative songwriting ideation at /songwriting:workflow instead of the retired skill.

Reviewed by Cursor Bugbot for commit 0e6d092. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor

cursor Bot commented Jul 12, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_ee180793-2602-4954-87cd-701d852dc676)

@claude

claude Bot commented Jul 12, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 54s —— View job


PR Review: refactor(songwriting): split pat-pattison mega-skill into concern skills

  • Gather context from PR description and changed files
  • Review SKILL.md files for new concern skills
  • Review corpus reorganization (context/pat-pattison/)
  • Review plugin.json version bump and CHANGELOG
  • Review cross-references and routing updates
  • Check alignment with CLAUDE.md guidelines
  • Post comprehensive review feedback

Summary

Well-executed decomposition. The concern-as-skill / author-as-context split is clean, the 8 SKILL.md files are internally consistent, the corpus is preserved verbatim, and the routing index (action-routing.md) is comprehensive. Three items below warrant attention before merge — one is a correctness gap, two are minor.


Finding 1 — Undocumented scope: README catalog rows deleted for non-present plugins

Severity: Low / Informational

The README diff removes two catalog rows not mentioned in the PR description:

-| [`codebase-audit`](plugins/codebase-audit) | Skills | Repo-wide drift audit... |
-| [`teach`](plugins/teach) | Skill | Interactive multi-session learning coach... |

Neither plugins/codebase-audit/ nor plugins/teach/ exists in the repo (ls plugins/ confirms). The deletions are therefore correct — stale catalog entries pointing to absent directories — but they're undocumented scope. The PR description says "Also updated the repo README catalog row" (singular, meaning only the songwriting row).

This is technically fine and the right thing to do, but it would be good to call it out explicitly in the PR description to avoid reviewer confusion.

No code change needed, but update the PR description to mention: "Also removed stale catalog rows for codebase-audit and teach (plugin directories absent from repo)."


Finding 2 — plugin.json description doesn't reflect new skill surface

Severity: Low

plugin.json line 5:

"description": "Songwriting craft companion — Pat Pattison lyric-craft coaching (rhyme, meter, prosody, song form, object writing, metaphor, co-writing) and Suno AI prompt engineering..."

This is the marketplace-browsing description and still reads as a single-skill description. The 8-skill decomposition isn't reflected, so /songwriting:workflow (the new front door) doesn't appear in the most prominent discoverable field.

The README.md and CHANGELOG.md are updated — this is the only metadata artifact that still implies a pre-refactor shape.

Suggested update: Fix this →


Finding 3 — daily-practice artifact convention not reflected in plugin README

Severity: Trivial

daily-practice/SKILL.md line 41:

Practice output persists per the artifact convention (`songwriting/practice/<YYYY>/<date>.md`).

The <YYYY>/ subdirectory is not mentioned in the plugin README's Artifacts section, which describes:

.claude/songwriting/ — lyric drafts, object-writing exercises, rhyme worksheets, daily practice, cross-song research, and shared worksheets...

The convention is plausible and internally self-consistent, but a consumer looking at the README wouldn't know about the year-subdirectory structure. Worth a one-liner addition to the Artifacts section of README.md.


What looks good

  • Structural correctness: All 8 SKILL.md files have valid frontmatter (name, description, argument-hint, user-invocable: true, disable-model-invocation: false), skill name matches directory, mandatory pre-flight filter references are skill-appropriate (§1 for rhyme, §3+§8 for diagnosis, §5+§2 for co-write, §6 for meter-prosody + song-form, §4 for workflow, §7 for object-writing, conditional for daily-practice).
  • Plugin-form safety: All context references use ${CLAUDE_PLUGIN_ROOT} where needed (e.g., rhyme/SKILL.md datamuse action). No ../ reach-outs. Corpus under context/ inside plugin root.
  • Routing completeness: action-routing.md has 35+ user-question → route mappings and covers the cross-skill routing surface comprehensively. The workflow/SKILL.md routing table and concern-skill routing index are consistent with each other.
  • Drift fixes are targeted: 12 files changed from verbatim (invocation strings remapped, datamuse.sh path corrected, action-routing.md reframed). All changes look intentional.
  • Version bump: 0.1.0 → 0.2.0 is appropriate for a breaking change (skill renamed, invocation strings changed).
  • CHANGELOG: Follows Keep a Changelog format, documents the design decision rationale clearly, lists both the breaking change and the backward-compat note (corpus preserved).
  • External cross-references: planning:brainstorm/SKILL.md correctly updated from /songwriting:pat-pattison to /songwriting:workflow.
  • Author seam design: The OCP framing (open for extension at context/<author>/, closed for modification on concern skills) is documented in README, CHANGELOG, and in every SKILL.md's Purpose section — the pattern is legible to future contributors.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is unavailable. Human review is needed; no reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9d5e5874db

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/songwriting/context/pat-pattison/research/action-routing.md
@kyle-sexton
kyle-sexton force-pushed the refactor/split-pat-pattison branch from 9d5e587 to eacc29d Compare July 12, 2026 06:18
@cursor

cursor Bot commented Jul 12, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_8f831542-1c07-42c7-9dd7-24afaa95bff7)

@claude

claude Bot commented Jul 12, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 3m 23s —— View job


PR Review: refactor(songwriting): split pat-pattison mega-skill into concern skills

  • Gather context from PR description and changed files
  • Review new SKILL.md files for all 8 concern skills
  • Review corpus reorganization and routing (action-routing.md)
  • Review plugin.json, CHANGELOG.md, README updates
  • Check Codex finding (action-routing.md line 90)
  • Verify CLAUDE.md compliance (design rules)
  • Post final review

Summary

Well-executed decomposition — clean concern/author axis split, internally consistent SKILL.md files, and the corpus is faithfully preserved. Previous review findings on plugin.json description (Finding 2) and daily-practice artifact path (Finding 3) are resolved in the current HEAD. One minor finding below and one clarification on the Codex P2 finding.


Finding 1 — Codex P2 (action-routing.md line 90): spec is correct, model-fidelity risk is real but overstated

Severity: Low / Informational

action-routing.md line 90:

/songwriting:object-writing 90 seconds hotel bar

The Codex finding claims 90 is treated as an unknown action. Per the spec in object-writing/SKILL.md:

"Parse $ARGUMENTS: first token = action when it matches a listed action, remainder = args; otherwise treat all of $ARGUMENTS as payload for the default."

The listed actions are object-writing, metaphor, metaphor-recipe, cliche, pov, worksheet. Since "90" doesn't match any of them, the entire "90 seconds hotel bar" string is the payload for the default prompt — the spec is correct and this sample works as documented.

That said, the Codex concern has real-world validity: LLM-based routing doesn't guarantee faithful spec adherence, and a model might treat "90" as an attempted-then-failed action specifier rather than falling through to the "otherwise" clause. A one-line comment on the sample would neutralise the ambiguity without changing behaviour:

/songwriting:object-writing 90 seconds hotel bar   # "90 seconds hotel bar" is the seed payload → default object-writing prompt

No change is required, but the annotation would preempt future confusion about this class of numeric-leading invocations.


What looks good

  • All 8 SKILL.md files: valid frontmatter (name, description, argument-hint, user-invocable: true, disable-model-invocation: false), name matches directory, mandatory pre-flight filter references are skill-appropriate (§1 rhyme, §3+§8 diagnosis, §5+§2 co-write, §6 meter-prosody + song-form, §4 workflow, §7 object-writing, conditional daily-practice).
  • plugin.json description (prev Finding 2): now correctly reads "eight concern-scoped lyric-craft skills (workflow router, rhyme, object-writing, meter-prosody, song-form, co-write, diagnosis, daily-practice) applying Pat Pattison's methods…" ✓
  • daily-practice artifact path (prev Finding 3): README Artifacts section now includes songwriting/practice/<YYYY>/<date>.md matching daily-practice/SKILL.md
  • planning:brainstorm cross-reference: correctly updated to → /songwriting:workflow from the retired /songwriting:pat-pattison
  • Plugin-form safety: all corpus references use ${CLAUDE_PLUGIN_ROOT} where needed (e.g., rhyme/SKILL.md datamuse action), no ../ reach-outs ✓
  • Routing consistency: the 7-action table in workflow/SKILL.md, the 35+ entry Quick Decision Guide in action-routing.md, and each concern skill's action table are all internally consistent ✓
  • Version bump and CHANGELOG: 0.1.0 → 0.2.0 appropriate for a breaking invocation change; CHANGELOG follows Keep a Changelog, documents the breaking change, migration path, and design-decision rationale ✓
  • Response-filter filter assignments: §6 for meter-prosody is the correct available section (no dedicated §meter exists; §6's stable/unstable analysis is the closest fit), conditional assignments in daily-practice (prompt-only runs skip the filter) are well-reasoned ✓
  • Corpus preservation: 53 byte-identical files, 12 intentional drift-fixes (invocation remaps, script path, action-routing reframe) — hash audit is credible ✓

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is unavailable. Human review is needed; no reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eacc29d8d3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/songwriting/skills/workflow/SKILL.md
Comment thread plugins/songwriting/skills/co-write/SKILL.md
Decompose the pat-pattison lyric-craft mega-skill into eight concern-scoped
skills (workflow, rhyme, object-writing, meter-prosody, song-form, co-write,
diagnosis, daily-practice), each a thin router over a shared reference corpus.
The suno skill is unchanged.

- Move the full corpus (48 research + 16 templates + datamuse.sh + the response
  filter) verbatim to context/pat-pattison/, preserving every intra-corpus link.
- Concern = skill (author-neutral interface); author/method = context namespace.
  Pat's method lives once under context/pat-pattison/; a future author plugs in
  at context/<author>/ without changing the concern skills (open/closed).
- Retire /songwriting:pat-pattison; /songwriting:workflow is the start-here
  situation router carrying the cross-skill routing index and Quick Decision Guide.
- Remap stale /pat-pattison invocation strings and the datamuse path across the
  corpus; rewrite READMEs, bump version 0.1.0 -> 0.2.0, add CHANGELOG.

Content preserved: 53 corpus files byte-identical, 0 lost. Verified locally:
lychee 660 OK / 0 errors, markdownlint 0 errors, typos clean, manifests validate.

Refs melodic-software/medley#1395
@kyle-sexton
kyle-sexton force-pushed the refactor/split-pat-pattison branch from eacc29d to 35c82ae Compare July 12, 2026 06:31
@cursor

cursor Bot commented Jul 12, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_7d315c91-76a2-40cc-a7fc-c5c55d2e8d2b)

@claude

claude Bot commented Jul 12, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 54s —— View job


PR Review: refactor(songwriting): split pat-pattison mega-skill into concern skills

  • Gather context from PR diff and changed files
  • Review new SKILL.md files for all 8 concern skills
  • Review corpus reorganization and new files (artifact-persistence.md, action-routing.md)
  • Review plugin.json, CHANGELOG.md, README updates
  • Review Codex P2 findings addressed by latest commit
  • Check CLAUDE.md compliance (fresh-docs mandate, design rules)
  • Post final review

Summary

Clean, well-executed refactor on the latest commit. Both Codex P2 findings from the previous round are correctly resolved. The three items worth noting below are all low-severity — two informational, one minor — and none block merge.


Finding 1 — artifact-persistence.md mixes persistence contract with rhyme-discipline enforcement

Severity: Low / Informational

artifact-persistence.md lines 38–42:

When introducing a rhyme pair, run the identity-vs-rhyme check (pre-vowel consonants MUST differ)
via the song's `worksheets/audit-checklist.md` Step 3 before declaring "this rhymes" — identity
is NOT rhyme (per [rhyme-fundamentals](rhyme-fundamentals.md)).

This file's stated purpose is "where generated files go, and how a consuming project overrides a bundled template." The rhyme-identity enforcement belongs in the rhyme skill's response-filter pre-flight (§1), not in a shared persistence contract. As written, the constraint applies to every skill that loads artifact-persistence.md (all eight), making it a cross-skill rhyme rule embedded in a file whose name promises only file-path conventions.

The constraint is correct and the pre-flight in rhyme/SKILL.md already enforces it. The issue is discoverability: a future contributor reading artifact-persistence.md to adjust file paths would find an unexpected behavioral mandate in the same document.

No change required to merge, but a future tidy: move the rhyme-identity enforcement sentence to rhyme-fundamentals.md or rhyme-generation.md, and leave artifact-persistence.md containing only paths and template-override logic.


Finding 2 — <date> shorthand in daily-practice/SKILL.md diverges from canonical format in artifact-persistence.md

Severity: Trivial

daily-practice/SKILL.md line 41:

Practice output persists per the artifact convention (`songwriting/practice/<YYYY>/<date>.md`).

artifact-persistence.md line 17:

| Daily practice | `songwriting/practice/<YYYY>/<YYYY-MM-DD>.md` |

The canonical format is <YYYY-MM-DD>.md; the SKILL.md inline mention uses the looser <date>.md. Since artifact-persistence.md is the authoritative source and the SKILL.md references it, a model reading both would use the canonical form — so this is not a functional issue. Consistent spelling (<YYYY-MM-DD>.md everywhere) would eliminate ambiguity for human readers and future contributors.

Fix this →


Finding 3 — action-routing.md sample line 90: spec is correct, annotation would future-proof it

Severity: Low / Informational

action-routing.md line 90:

/songwriting:object-writing 90 seconds hotel bar

As verified in the previous round: the object-writing skill correctly implements payload-first routing — "90" doesn't match any listed action (object-writing, metaphor, metaphor-recipe, cliche, pov, worksheet), so the full string "90 seconds hotel bar" falls through to the default timed-prompt handler. The spec is sound.

The prior review suggested an inline comment; this remains a valid low-cost clarification for contributors who maintain this file. No change required.


What's resolved since previous reviews

  • Template override (Codex P2, workflow/SKILL.md:49): Fully resolved. New artifact-persistence.md establishes the shared contract; all 8 SKILL.md files carry a ## Persistence and template overrides section that loads it and repeats the override check inline. /songwriting:workflow brainstorm now honors a project-level templates/pat-pattison/brainstorm-opener.md. ✓
  • Co-write artifact layout (Codex P2, co-write/SKILL.md:44): Resolved. co-write/SKILL.md now explicitly points to artifact-persistence.md and names the variations//worksheets/ paths. ✓
  • plugin.json description (prev Finding 2): Correctly updated to reflect 8-skill decomposition. ✓
  • daily-practice artifact year-subdirectory (prev Finding 3): README Artifacts section now includes <YYYY>/<date>.md. ✓

What looks good

  • All 8 SKILL.md files: Valid frontmatter (name, description, argument-hint, user-invocable: true, disable-model-invocation: false), name matches directory, mandatory pre-flight section references are skill-appropriate.
  • Plugin-form safety: Only ${CLAUDE_PLUGIN_ROOT} and relative paths within plugin root (../../context/pat-pattison/). No ../ reach-outs beyond plugin boundary. datamuse.sh referenced via ${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/scripts/datamuse.sh. ✓
  • Author seam: OCP pattern (concern skills = stable interface, context/<author>/ = extension point) is consistent across all 8 SKILL.md files, README, and CHANGELOG. Future author method integration requires no skill edits. ✓
  • Corpus preservation: 53 byte-identical files, 12 targeted drift-fixes (invocation remaps, datamuse.sh path, action-routing.md reframe). ✓
  • Routing consistency: workflow/SKILL.md 7-action table, action-routing.md 35+ Quick Decision Guide, and each concern skill's action table are internally consistent with no routing gaps. ✓
  • Version bump + CHANGELOG: 0.1.0 → 0.2.0 correct for a breaking invocation rename; CHANGELOG documents breaking change, migration path, and design rationale. ✓
  • External cross-refs: planning:brainstorm/SKILL.md correctly updated to /songwriting:workflow; root README catalog row updated. ✓
  • datamuse.sh exec-bit: Preserved at 100755 after the move to context/pat-pattison/scripts/. ✓

Verdict: Approve. The decomposition is structurally sound, previously flagged issues are resolved, and the two new findings above are informational / trivial and do not block merge.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is unavailable. Human review is needed; no reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@cursor

cursor Bot commented Jul 12, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_8354e9cc-7548-4267-9f72-e73f26ee716b)

@claude

claude Bot commented Jul 12, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 44s —— View job


PR Review: refactor(songwriting): split pat-pattison mega-skill into concern skills

  • Gather context from latest commit and diff
  • Review new and modified files (8 SKILL.md files, corpus, plugin.json, CHANGELOG, README)
  • Check alignment with CLAUDE.md guidelines
  • Post comprehensive review feedback

Latest push: merge-with-main only

The latest commit (0e6d092) is a forward-merge from main bringing in the event-storming plugin addition and planning updates. No songwriting content changed. The refactor itself is fully captured in 35c82ae. Everything below covers the full PR diff.


Summary

Well-executed, thoroughly-considered decomposition. All 8 concern skills are internally consistent, the corpus is faithfully preserved, and the two Codex P2 findings from earlier rounds are resolved. Three items below: one trivial open inconsistency from the previous round, and two informational notes.


Finding 1 — <date> placeholder still inconsistent across three files (trivial, unresolved from prior review)

Severity: Trivial

Three files still use the looser <date>.md shorthand; artifact-persistence.md is the authoritative source and uses <YYYY-MM-DD>.md:

File Line Text
daily-practice/SKILL.md 41 `songwriting/practice/<YYYY>/<date>.md`
daily-practice/SKILL.md 47 to `songwriting/practice/<YYYY>/<date>.md`
README.md 43 `songwriting/practice/<YYYY>/<date>.md`

The model reading both files would use the canonical <YYYY-MM-DD> form from artifact-persistence.md, so this is not a functional issue — but aligning the spelling in daily-practice/SKILL.md (×2) and README.md (×1) removes any ambiguity for human readers and future contributors.

Fix this →


Finding 2 — artifact-persistence.md embeds a rhyme-discipline rule (informational, no change needed)

Severity: Low / Informational

artifact-persistence.md lines 38–42:

When introducing a rhyme pair, run the identity-vs-rhyme check (pre-vowel consonants MUST differ)
via the song's `worksheets/audit-checklist.md` Step 3 before declaring "this rhymes" — identity
is NOT rhyme (per rhyme-fundamentals.md).

The file's stated purpose is file-path conventions and template-override protocol. The rhyme-identity enforcement belongs in rhyme/SKILL.md's pre-flight (§1 already has it) and in rhyme-fundamentals.md. As written, it becomes a cross-skill rhyme constraint embedded in a file named for persistence. Functionally fine (the constraint is correct); a future tidy would move this sentence to rhyme-fundamentals.md and leave artifact-persistence.md containing only paths and override logic.

No change required to merge.


Finding 3 — action-routing.md line 90 comment (informational, no change needed)

Severity: Low / Informational

action-routing.md line 90:

/songwriting:object-writing 90 seconds hotel bar

As confirmed in the previous round: "90" doesn't match any listed object-writing action so the full "90 seconds hotel bar" string falls through to the default timed-prompt handler — correct per spec. An inline comment (e.g. # "90 seconds hotel bar" is the seed payload → default object-writing prompt) would future-proof this for contributors maintaining the file. No change required to merge.


What looks good

  • All 8 SKILL.md files: valid frontmatter (name, description, argument-hint, user-invocable: true, disable-model-invocation: false), name matches directory, consistent payload-first action router, mandatory pre-flight filter assignments are skill-appropriate (§1 rhyme, §3+§8 diagnosis, §5+§2 co-write, §6 meter-prosody + song-form, §4 workflow, §7 object-writing, conditional daily-practice). ✓
  • Template override (Codex P2, workflow/SKILL.md:49): Resolved. New artifact-persistence.md defines the shared contract; all 8 SKILL.md files carry a ## Persistence and template overrides section loading it and repeating the override check inline. ✓
  • Co-write artifact layout (Codex P2, co-write/SKILL.md:44): Resolved. co-write/SKILL.md explicitly points to artifact-persistence.md and names variations//worksheets/ paths. ✓
  • plugin.json description: Correctly reads "eight concern-scoped lyric-craft skills (workflow router, rhyme, object-writing, meter-prosody, song-form, co-write, diagnosis, daily-practice) applying Pat Pattison's methods…" ✓
  • Plugin-form safety: All context references use ${CLAUDE_PLUGIN_ROOT} where needed; no ../ reach-outs beyond plugin boundary. datamuse.sh referenced via ${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/scripts/datamuse.sh; exec-bit at 100755 preserved. ✓
  • Routing consistency: workflow/SKILL.md 7-action table, action-routing.md 35+ Quick Decision Guide, and each concern skill's action table are internally consistent with no routing gaps. ✓
  • Author seam: OCP pattern (concern skills = stable interface, context/<author>/ = extension point) is legibly documented across all 8 SKILL.md files, README, and CHANGELOG. ✓
  • Corpus preservation: 53 byte-identical files, 12 targeted drift-fixes (invocation remaps, datamuse.sh path, action-routing.md reframe). ✓
  • Version bump + CHANGELOG: 0.1.0 → 0.2.0 correct for breaking invocation rename; CHANGELOG documents breaking change, migration path, and design rationale. ✓
  • External cross-refs: planning:brainstorm/SKILL.md correctly updated to /songwriting:workflow; root README catalog row updated. ✓
  • Merge commit: clean forward-merge from main (event-storming + planning additions); no regressions in songwriting content. ✓

Verdict: Approve. The three findings above are trivial/informational and do not block merge. The one actionable item (Finding 1, the <date> spelling) is a one-liner cleanup that can land in a follow-up.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is unavailable. Human review is needed; no reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@kyle-sexton
kyle-sexton merged commit ee144ba into main Jul 12, 2026
22 checks passed
@kyle-sexton
kyle-sexton deleted the refactor/split-pat-pattison branch July 12, 2026 06:40
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.

1 participant