Skip to content

fix(songwriting): adjudicate meter.md against Writing Better Lyrics chapters 14-17 - #2063

Merged
kyle-sexton merged 5 commits into
mainfrom
fix/meter-adjudicate-2009-chapters-14-17
Aug 9, 2026
Merged

fix(songwriting): adjudicate meter.md against Writing Better Lyrics chapters 14-17#2063
kyle-sexton merged 5 commits into
mainfrom
fix/meter-adjudicate-2009-chapters-14-17

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

No linked issue — the defects this PR fixes were found by the pass itself, not
filed ahead of it.

Fourth session of the chapter-by-chapter source-fidelity pass. Writing Better
Lyrics
(2009) Chapters 14 (Meter: Something in Common), 15 (Spotlighting with
Common Meter), 16 (Meter: Two by Two), and 17 (Managing Couplets) read in full
against meter.md. Plugin 0.7.0 → 0.7.1.

Paraphrase only — no chapter prose, no example writes, no student work.

The pass read figures for the first time, and that is where the worst defect was

Every prior chapter pass extracted EPUB text by stripping tags, which silently
deletes page-scan images. Chapter 14's text has five dangling colons where
figures should be; Chapter 16 has two. Chapter 16's Exercise 20 exists only
as a figure
, and the version distilled into meter.md was wrong in four
independent ways:

Source (nine models) What meter.md said
abaa at 4/3/4/4 absent entirely
aaabcccb at 4/4/4/3/4/4/4/3 ababaccc
ababcccc at 4/4/4/4/4/4/4/4 abacccc
every model carries a stress count all stress data stripped
five of nine mix a three-stress line whole set labelled "four-stress"

A coaching exercise whose data is wrong teaches the wrong thing, and the stress
counts are half of what the exercise is for — the couplet/common-meter
contrast is only audible where a three-stress line sits against four-stress
neighbours. The nine models now carry both dimensions in their own table.

The binding defect: meter-prosody ran the wrong filter

Found by protocol step 3 — sweeping for what should cite the chapter — not by
the chapter read.

meter-prosody's mandatory pre-flight ran response-filter §6 Form, whose
stated triggers are song-shape questions ("verse/chorus or AABA", "do I need a
bridge") and whose checklist is form-shape throughout. A scansion request
matches none of them. Worse, the skill's own emission boundary forbids it
from judging that a section is the wrong length or shape — so its mandatory
pre-flight required it to check boxes it is not allowed to act on, while
nothing gated the output it actually emits. response-filter has eight
sections and not one covered meter.

Fixed by routing to §3 Critique — the filter for findings delivered on a
draft, which is exactly what a scansion verdict is — rather than by standing up
a ninth section, and by adding the two boxes §3 genuinely lacked:

  • Line length counted in stresses. Every "longer", "shorter", "matched", or
    "balanced" claim is a count of stressed syllables. No stress map marked means
    no length claim made. This is Chapter 14's own rule, and it is F9's defect:
    in the pilot a chorus reported as an 8/9/9/8 strength was 3/4/3/3 by the
    correct measure, and the strength did not exist.
  • Spotlight carries its content. For each position the structure marks,
    name the content sitting there. Chapter 15's rule is blunt — when you turn on
    spotlights, use them — and Chapter 14's corollary is that you do not turn one
    on to be cute. Neither bound anything before this.

This is the pilot's core failure shape again: not disclosure, binding. The rule
was in a research file and governed no generation.

The Pentad was defined two incompatible ways in one file

meter.md defines the Structural Pentad twice as balance / pace / flow /
closure / type of closure, and explicitly distinguishes it from the Five
Compositional Elements ("the Elements name the levers; the Pentad names the
effects"). A third section then listed the Elements — number of lines, length
of lines, rhythm, rhyme scheme, rhyme type — under the Pentad's name.
five-compositional-elements.md independently confirms which list is which.

The same section claimed this is what lets stable-unstable-meta.md work
across lyric, melody, and harmony. It is not: that file carries per-domain
stability criteria of its own (tonic pitch, chord inversion, note length) and
never applies the Pentad's five properties. Both claims corrected. The
cross-domain claim itself still cites 1991 Chapter 3 and awaits the Book 1
read.

Also added

  • The extension-inside-line-four move lights two positions, not one — the
    third stressed syllable, where the expected rhyme failed to arrive, and the
    fourth, which protrudes past the promised end. A writer who fills only the
    final position leaves the earlier spotlight burning on whatever landed there.
    The insertion is also two syllables, one unstressed and one stressed.
  • Closure defeats rhyme independently of distance. Chapter 16's case is a
    line whose end sound matches lines two and four of its own verse and still
    reads as unrhymed, because the first four lines had already closed into a
    unit. Proximity on the page is not audibility.
  • Composite destabilizing. Chapter 16's closing chorus fires four
    destabilizers at once — odd line count, odd rhyme scheme, a first-use
    two-stress line, and a section outrunning the eight-bar units the verse
    established, out to eleven. Bar-count overrun as a device appeared nowhere
    in the file
    and is the one most easily missed on the page.
  • The eight-line couplet escape's line lengths. Lines four and eight are
    shorter — three stresses — not merely unrhymed and answered. An unrhymed line
    of matched length does not open the same IOU.

Verified correct

  • meter.md's image inventory is exactly right (Ch14 AU7-AUB, Ch15
    none, Ch16 AUC-AUD, Ch17 none), confirmed against the EPUB manifest.
    Nothing had ever checked it.
  • The Ch14 figures confirm the 4/3/4/3-over-eight-bars mapping. Each
    four-stress phrase is seven quarter notes plus a rest across two bars; each
    three-stress phrase five notes plus a longer rest. The distilled claim stands.
  • Chapter 15's spotlight ladder, the deceptive-vs-unexpected distinction, and
    the xaxa transfer are faithful. So is Chapter 17's 435435 xxaxxaabcabc
    expansion ladder, its looser-for-uncertainty / tighter-for-resolved rule, and
    the rubber-band restraint on delayed payoff.

Step 5 — evals

No eval set encodes a meter claim, so nothing asserts a fixed defect back.
First chapter pass where step 5 came back empty. meter-prosody carries no
eval set at all — a standing advisory check-skill WARN, pre-existing and not
authored here.

Held back deliberately

Chapter 15 opens with a diagnostic worth having — a good line landing flat is a
structure problem, not an inspiration problem. Its home is diagnose or
prosody.md, diagnose carries an eval set that would then need checking, and
Chapter 19 ("Understanding Motion", the book's largest, which Chapters 16 and
17 both forward-reference by name) is next in the queue and almost certainly
touches it. Decide it there rather than guess here.

Scope warning

meter.md is audited against 2009 Chapters 14-17 only. Roughly a third of
the file sources to Essential Guide to Lyric Form and Structure (1991)
Chapter 3 (the Pentad, the Paradigms, Goldilocks) and Songwriting Without
Boundaries
(2011) Challenge 4 (the day 43-56 curriculum, pitch-stress, the
compound-word rule, the "into" rule, In Memoriam). None of that was checked.

Verification

  • check-changed-skills.sh — 38 skills, 0 failed
  • check-skill.sh meter-prosody — PASS, 2 pre-existing warnings
  • check-listing-budget.sh — 6127/8000
  • markdownlint-cli2 — 0 errors over 103 files
  • lychee --offline --include-fragments — 0 errors, 686 OK
  • validate-plugins.sh — passed
  • check-changelog-parity.sh --check / --check-bump origin/main /
    --check-order — all clean

Review findings addressed

Two Codex review threads, both confirmed against the file's own contents and
fixed in a follow-up commit:

  • The short-line IOU claim named model 9, which has no short line. Model 9
    is 4/4/4/4/4/4/4/4 in the table directly above it; the delayed answer
    belongs to model 8, whose short fourth line is answered by its short eighth.
    The claim now names model 8 only.
  • The cross-reference list still called stable-unstable-meta.md a
    "cross-domain Pentad"
    — the exact characterization this PR corrects two
    sections earlier. The descriptor now matches: per-domain stability criteria
    of its own, not the Pentad applied across domains.

Related

🤖 Generated with Claude Code

…hapters 14-17

Chapters 14-17 read in full, including the page-scan figures that tag-stripping
had been discarding on every prior pass. The largest defect was in one of them.

meter-prosody's mandatory pre-flight ran response-filter §6 Form, whose boxes
decide song shape and which the skill's own emission boundary forbids it from
acting on; nothing gated the output it actually emits. Routed to §3 Critique,
which gains the two boxes it lacked: length claimed in stresses, and every
structurally marked position named together with the content sitting in it.

Chapter 16's nine couplet/common-meter models were mis-transcribed — one model
omitted, two rhyme schemes corrupted, every stress count stripped, and the set
labelled four-stress when five of the nine mix a three-stress line.

The Structural Pentad was defined two incompatible ways in one file: one
section carried the Five Compositional Elements under the Pentad's name, along
with a cross-domain claim that stable-unstable-meta.md does not honor.

Also adds the two-position spotlight analysis, closure as a rhyme defeater
independent of distance, composite destabilizing with bar-count overrun, and
the eight-line escape's missing line lengths.

Paraphrase only; no chapter prose, example writes, or student work.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@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: f443eaaf39

ℹ️ 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/meter.md Outdated
Comment thread plugins/songwriting/context/pat-pattison/research/meter.md
kyle-sexton and others added 2 commits August 9, 2026 02:42
The short-line IOU claim named models 8 and 9, but model 9 runs 4/4/4/4/4/4/4/4
in the table directly above it and has no short line to open the IOU with. The
delayed answer belongs to model 8 alone, whose short fourth line is answered by
its short eighth.

The cross-reference list still described stable-unstable-meta.md as a
"cross-domain Pentad" — the characterization this branch corrects two sections
earlier. A reader following the file's own navigation received the incompatible
claim the correction was meant to remove.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
PR #2018 landed a songwriting 0.7.1 while this branch was open and claimed the
same version, so this branch's entry becomes 0.7.2 and the manifest follows.

meter-prosody's pre-flight composes both sides: this branch's reroute from
response-filter §6 Form to §3 Critique, and main's allowance that the box
narration may live in reasoning rather than the visible response.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 5s —— View job


Security Review

  • Gather context (gh pr diff 2063, changed files)
  • Review changed files for security issues
  • Post findings

Scope reviewed: all 5 changed files —
plugins/songwriting/.claude-plugin/plugin.json,
plugins/songwriting/CHANGELOG.md,
plugins/songwriting/context/pat-pattison/research/meter.md,
plugins/songwriting/context/pat-pattison/research/response-filter.md,
plugins/songwriting/skills/meter-prosody/SKILL.md.

No security issues found.

This PR is a content-only change to the songwriting plugin: a plugin.json version bump, a CHANGELOG entry, and prose edits to three research/skill markdown files (correcting the couplet-model table, reconciling the Structural Pentad definition, and repointing meter-prosody's pre-flight from response-filter §6 to §3). There is:

  • No code execution path — no scripts, hooks, or shell invocations added or modified.
  • No GitHub Actions workflow touched (.github/workflows is untouched by this PR).
  • No secrets, tokens, or credentials referenced.
  • No new external links or fetches — the only new links (five-compositional-elements.md, stable-unstable-meta.md, meter.md) are relative, same-directory markdown cross-references with no ../ traversal, consistent with the plugin-form-safe rule in this repo's CLAUDE.md.
  • No user-input handling, injection surface, or authorization/access-control logic — these are static reference docs consumed by the skill's own pre-flight instructions, not executable code.

I also confirmed the two prior Codex review findings (model 9 misattributed in the short-line IOU claim; the stale "cross-domain Pentad" cross-reference) are already resolved in the current HEAD (meter.md lines 143-144 and 230-232) — not a security matter, just noting the follow-up commit landed correctly.

Branch: fix/meter-adjudicate-2009-chapters-14-17

@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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


Claude finished the review

Summary

This is a documentation/context-file correction pass on the songwriting plugin — no executable code changed. I diffed against the actual pre-PR main tip (5fe38fb, confirmed as the second parent of this branch's own Merge origin/main commit — my local origin/main ref was stale at 17ab4f5 and I don't have fetch access in this sandbox, so I verified equivalence by ancestry check rather than assuming) and read all five changed files in full.

Both prior Codex threads are resolved in the follow-up commit (c90c00c):

  • The short-line IOU claim now names model 8 only, consistent with the table (meter.md line 417 shows model 8 as 4/4/4/3/4/4/4/3; the prose at line 420-423 now says "model 8 is long enough for its short fourth line to open an IOU that its short eighth line answers").
  • The stable-unstable-meta.md cross-reference no longer calls it a "cross-domain Pentad."

One finding remains, filed inline on meter.md lines 979-981: the Codex fix for the cross-reference was only partial. The bullet now reads "Pentad properties feed the stable/unstable diagnostic; its own per-domain stability criteria, not the Pentad applied across domains" — the surviving first clause restates the exact wrong claim the PR corrects two sections earlier (lines 970-972), so the bullet is now internally self-contradictory rather than simply outdated. Suggested a one-line fix.

Everything else checks out on a full read:

  • The nine-model table (meter.md 408-418) and its prose summary (420-423) are internally consistent; the eight-line couplet-escape passage (470-474) matches model 8's notation exactly.
  • response-filter.md's new §3 boxes and routing-table row are additive and don't collide with the unchanged §6 Form section (confirmed §6 has no stray meter/scansion references left behind).
  • meter-prosody/SKILL.md's pre-flight now points at §3 in both the prose and the Handlers line, matching the corrected response-filter.md routing.
  • plugin.json version (0.7.1 → 0.7.2) and the new CHANGELOG.md [0.7.2] section correctly reflect the diff; the PR body's "0.7.0 → 0.7.1" is stale text describing the pre-Codex-fix state, not a functional issue.
  • The new same-file anchor link #couplet-and-common-meter-models (line 588) correctly targets the new ## Couplet and common-meter models header.

Not independently verified: the PR's cited source-fidelity claims against the Writing Better Lyrics (2009) print chapters (I have no access to the source book), and the author-claimed verification commands (check-changed-skills.sh, check-skill.sh, markdownlint-cli2, lychee, validate-plugins.sh, check-changelog-parity.sh) — I attempted to run check-skill.sh myself but shell execution beyond basic read-only commands required approval I don't have in this session, so I could not independently confirm those results and am not treating the author's stated output as verified.

Comment thread plugins/songwriting/context/pat-pattison/research/meter.md Outdated
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count.

…le pointer

The prior fix removed the "cross-domain Pentad" label but left "Pentad
properties feed the stable/unstable diagnostic" in the same clause — the same
claim this branch corrects two sections earlier. stable-unstable-meta.md's
levers are its own (rhyme stability, phrase count, phrase length, line ending,
verb tense, POV, tone of voice); the Pentad's balance / pace / flow / closure /
type of closure never appear in it, and only "closure" coincides by name.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 22s —— View job


Security Review

  • Gather context (git diff restricted to this PR's commits vs. its actual pre-PR base, confirmed blob SHAs against the PR metadata)
  • Review changed files for security issues
  • Post findings

Scope reviewed: all 5 changed files —
plugins/songwriting/.claude-plugin/plugin.json,
plugins/songwriting/CHANGELOG.md,
plugins/songwriting/context/pat-pattison/research/meter.md,
plugins/songwriting/context/pat-pattison/research/response-filter.md,
plugins/songwriting/skills/meter-prosody/SKILL.md.

(Note: this sandbox has no git fetch access, so origin/main...HEAD has no merge base locally. I instead diffed each file at HEAD against its state before this PR's first commit and verified every current blob SHA matches the PR metadata's changed_files list exactly, so the reviewed content is confirmed correct.)

No security issues found.

This PR is a content-only change to the songwriting plugin: a version bump (0.7.0 → 0.7.2), a CHANGELOG entry, and prose corrections to two research/context markdown files plus a skill's pre-flight routing instruction. Specifically:

  • No code execution path — no scripts, hooks, or shell invocations added or modified.
  • No GitHub Actions workflow touched.
  • No secrets, tokens, or credentials referenced anywhere in the diff.
  • No new external links or fetches — the only new/changed links (five-compositional-elements.md, stable-unstable-meta.md, meter.md) are relative, same-directory markdown cross-references with no ../ traversal, consistent with this repo's plugin-form-safe rule.
  • No user-input handling, injection surface, or authorization/access-control logic — these are static reference docs consumed by the skill's own pre-flight instructions (which route a scansion request to response-filter §3 instead of §6), not executable code or a prompt-injection-reachable surface.
  • meter-prosody/SKILL.md's routing change and response-filter.md's new §3 checklist boxes are additive/instructional text only — they change which internal review checklist an agent consults before responding, with no effect on tool permissions, file access, or trust boundaries.

I also confirmed both prior Codex/Claude review threads on this PR (model 9 misattributed in the short-line IOU claim; the "cross-domain Pentad" cross-reference contradiction) are resolved as of the current HEAD (51f38d2) — the meter.md Cross-references section now reads "a separate song-wide diagnostic with per-domain stability criteria of its own; it does not apply the Pentad's five properties," with no remaining internal contradiction. Not a security matter, just confirming the follow-up commit landed cleanly.
· Branch: fix/meter-adjudicate-2009-chapters-14-17

@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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


Code Review

  • Gather context (git diff against pre-PR base, changed files, CLAUDE.md/REVIEW.md)
  • Review meter.md changes for correctness/internal consistency
  • Review response-filter.md changes
  • Review meter-prosody/SKILL.md changes
  • Review CHANGELOG.md / plugin.json version bump
  • Check prior Codex + Claude review threads for current resolution status
  • Post findings

Summary

This is a documentation/context-file correction pass on the songwriting plugin — no executable code, hooks, or workflows changed, so no fresh-docs-mandate contract surface is touched (meter-prosody/SKILL.md's frontmatter is untouched; only its body prose changed). I diffed against 5fe38fb (the pre-PR main tip, confirmed as the second parent of this branch's own merge commit a997b42 — my sandbox has no network access to fetch origin, so I verified equivalence by ancestry rather than assuming) and read all five changed files in full at HEAD (51f38d2).

Both prior Codex threads, and the finding from my own previous pass on this PR, are now fully resolved:

  • The short-line IOU claim names model 8 only (meter.md lines 417/422-423), consistent with the table.
  • The stable-unstable-meta.md cross-reference (meter.md lines 979-981) no longer contains the self-contradictory "Pentad properties feed..." clause I flagged last round — the latest commit (51f38d2) dropped it cleanly, so the bullet now reads consistently with the corrected claim two sections above (lines 970-972).

Full internal-consistency check on the nine-model table (meter.md lines 408-418): every row's letter-count in the rhyme scheme matches its stress-group count, "models 1-3 and 9 run entirely on four-stress lines" is correct (rows 4-8 each contain at least one 3), and "five of nine mix a three-stress line" correctly counts rows 4-8. The eight-line couplet-escape passage (470-474, 4/4/4/3/4/4/4/3 / aaabcccb) matches model 8's table row exactly. The new #couplet-and-common-meter-models anchor link (line 588) resolves to the actual header (line 403).

Cross-file consistency: five-compositional-elements.md independently confirms the "levers" framing (line 222) and the corrected Pentad definition (balance/pace/flow/closure/type-of-closure, line 117) that meter.md now uses, so the two files no longer disagree about which five-item list is which.

response-filter.md / meter-prosody/SKILL.md: the new §3 routing-table row and pre-flight boxes are additive and don't collide with the unchanged §6 Form section (no stray §6/meter references left behind in SKILL.md, confirmed by grep). SKILL.md's pre-flight now points at §3 in both the prose explanation and the Handlers line, matching response-filter.md's corrected routing.

plugin.json / CHANGELOG.md: version 0.7.1 → 0.7.2 and the new [0.7.2] section accurately reflect the diff's Fixed/Added content.

No correctness, design, or maintainability issues found in this diff — nothing to anchor an inline comment to.

Not independently verified (no network / restricted shell in this sandbox): the PR's cited source-fidelity claims against the print Writing Better Lyrics (2009) chapters, and the author-claimed verification commands (check-changed-skills.sh, check-skill.sh, markdownlint-cli2, lychee, validate-plugins.sh, check-changelog-parity.sh) — attempts to run these locally were blocked by the sandbox's approval gate, so I'm not treating that author-claimed output as independently confirmed. Security review is out of scope for this lane per REVIEW.md (handled separately, already posted above).

Branch: fix/meter-adjudicate-2009-chapters-14-17

"mis-transcribed" trips the spell-check gate, which reads the hyphenated prefix
as a typo for "miss"/"mist". The closed phrasing is plainer anyway.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 41s —— View job


Security Review

  • Gather context (gh pr diff 2063, changed files)
  • Review changed files for security issues
  • Post findings

Scope reviewed: all 5 changed files —
plugins/songwriting/.claude-plugin/plugin.json,
plugins/songwriting/CHANGELOG.md,
plugins/songwriting/context/pat-pattison/research/meter.md,
plugins/songwriting/context/pat-pattison/research/response-filter.md,
plugins/songwriting/skills/meter-prosody/SKILL.md.

No security issues found.

This PR is a content-only change to the songwriting plugin: a plugin.json version bump (0.7.1 → 0.7.2), a CHANGELOG.md entry, and prose corrections to two research/context markdown files plus a skill's mandatory pre-flight routing instruction. Specifically:

  • No code execution path. No scripts, hooks, MCP config, or shell invocations are added or modified — every changed file is static markdown or a JSON manifest field (version).
  • No GitHub Actions workflow touched (.github/workflows is untouched by this diff), so the dangerous-trigger / permission-widening / script-injection concerns this lane watches for don't apply here.
  • No secrets, tokens, or credentials referenced anywhere in the diff.
  • No new external links or fetches. The only new/changed links (five-compositional-elements.md, stable-unstable-meta.md, meter.md) are relative, same-directory markdown cross-references with no ../ traversal — consistent with this repo's plugin-form-safe rule (CLAUDE.md).
  • No user-input handling, injection surface, or authorization/access-control logic. meter-prosody/SKILL.md's change repoints which internal review checklist (response-filter.md §3 vs. §6) an agent consults before emitting a scansion verdict — this affects reasoning/output-quality guidance only, with no effect on tool permissions, file-system access, network egress, or trust boundaries.
  • response-filter.md's two new §3 checklist boxes and routing-table row are additive instructional text, not logic that gates access to anything.

Consistent with the three prior security-review passes on this PR (all clean) and the check-*/lychee/markdownlint verification the author reports in the PR body — nothing in this diff falls within this lane's threat model (injection, auth, secrets, dangerous CI patterns, supply-chain).

Branch: fix/meter-adjudicate-2009-chapters-14-17

@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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


Code Review

  • Gather context (git diff 5fe38fb...HEAD — confirmed as the true pre-PR base, second parent of this branch's own merge commit a997b42; matches the PR's stated +160/-22 exactly)
  • Review meter.md changes
  • Review response-filter.md changes
  • Review meter-prosody/SKILL.md changes
  • Review CHANGELOG.md / plugin.json version bump
  • Check prior Codex + Claude review threads for current resolution status
  • Post findings

Summary

Documentation/context-only change to the songwriting plugin — no executable code, hooks, or manifests with contract surface beyond a version bump, so the fresh-docs mandate doesn't apply here (meter-prosody/SKILL.md's frontmatter is untouched; only its prose body changed). I read all five changed files in full at HEAD (b89f1da) against the correct merge base.

Both prior Codex threads, and the finding from earlier review rounds on this PR, are fully resolved and internally consistent as of HEAD:

  • Short-line IOU claim names model 8 only (meter.md#L417-423), matching the table.
  • The stable-unstable-meta.md cross-reference (meter.md#L979-981) no longer carries the self-contradictory "Pentad properties feed..." clause — the final commit dropped it cleanly, and the bullet now agrees with the corrected claim two sections above (L956-963).

Full internal-consistency pass (new this round, not covered by earlier reviews):

  • Traced the Pentad definition across all four places it appears in the file (L498-508, L727-761, L954-963, L976-981) — all four now agree on balance/pace/flow/closure/type-of-closure, and five-compositional-elements.md independently confirms the same five-item list at its own L117, so the cross-file claim is accurate, not just internally consistent.
  • Confirmed stable-unstable-meta.md's actual "five motion controllers" table (lyric/melody/harmony/melodic rhythm/harmonic rhythm) is a distinct framework from the Pentad, supporting meter.md's corrected claim that it does not apply the Pentad's five properties.
  • Grepped the whole plugin for the corrupted rhyme-scheme strings (ababaccc, abacccc) the PR replaces — no stale copies remain anywhere else in the plugin.
  • Checked every other skill that references response-filter.md's §3/§6 split (diagnose, song-form, co-write): diagnose already routed critique/scansion output to §3 correctly, and song-form (which actually owns shape/length judgments) correctly uses §6. The meter-prosody mis-route this PR fixes was isolated to that one skill — confirmed by grep across skills/, not just by reading the diff.
  • Verified meter-prosody/SKILL.md's own emission-boundary table (L64-68) does say a "wrong length or shape" judgement routes to song-form, which is the factual basis for this PR's claim that §6 Form's checklist was ungated boxes the skill isn't allowed to act on — the claim holds up against the skill's own text, not just the PR description of it.
  • Nine-model table (meter.md L408-418): every row's letter-count matches its stress-group count; "5 of 9 mix a three-stress line" and "only 1-3 and 9 run entirely four-stress" both check out against the table. The eight-line couplet-escape passage (L470-474) matches model 8's row exactly. New anchor link #couplet-and-common-meter-models (L588) resolves correctly.
  • response-filter.md's new §3 boxes and routing-table row are additive; grepped §6 Form (L348-374) for leftover meter/scansion references — none remain.
  • plugin.json (0.7.1 → 0.7.2) and the new CHANGELOG.md [0.7.2] section accurately reflect the diff's Fixed/Added content; format matches prior entries.

No correctness, design, or maintainability issues found — nothing new to anchor an inline comment to. This PR is ready from a code-review standpoint.

Not independently verified (no tool access to confirm): the PR's cited source-fidelity claims against the print Writing Better Lyrics (2009) chapters, and the author-claimed verification commands (check-changed-skills.sh, check-skill.sh, check-listing-budget.sh, markdownlint-cli2, lychee, validate-plugins.sh, check-changelog-parity.sh) — these are author-claimed only, not something I ran myself this session. Security review is out of scope for this lane (handled separately, already posted above).
· Branch: fix/meter-adjudicate-2009-chapters-14-17

@kyle-sexton
kyle-sexton enabled auto-merge (squash) August 9, 2026 14:49
@kyle-sexton
kyle-sexton merged commit 136c8e4 into main Aug 9, 2026
33 checks passed
@kyle-sexton
kyle-sexton deleted the fix/meter-adjudicate-2009-chapters-14-17 branch August 9, 2026 14:50
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
PR #2063 squash-merged, so its commits arrive on main as one unrelated SHA and
every file this branch shares with it conflicts textually despite agreeing in
content.

All three resolutions keep this branch's side, which is a superset of what
landed: 0.7.3 supersedes 0.7.2, the 0.7.3 changelog entry stacks above the
0.7.2 one, and §3's trigger list, reference list, and checklist each extend
#2063's versions rather than diverging from them.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
… chapters 18-19 (#2071)

No linked issue — the defects this PR fixes were found by the pass
itself, not
filed ahead of it.

Fifth session of the chapter-by-chapter source-fidelity pass. *Writing
Better
Lyrics* (2009) Chapters 18 (Prosody: Structure as Film Score) and 19
(Understanding Motion) read in full, both figures included, against
`prosody.md`. Plugin 0.7.2 → 0.7.3.

Paraphrase only — no chapter prose, no example writes, no student work.

**Stacked on #2063**, which is open and carries 0.7.2. Merge that one
first.

## Three structural glosses were wrong, two of them backwards

Chapter 19 is a ranked catalogue of section structures — every
combination from
two lines to six, each ordered most-stable to least-stable and glossed
with what
it does to the ear. `prosody.md` reproduces the orderings faithfully.
Three of
the individual glosses do not survive the chapter.

| Structure | What `prosody.md` said | What Chapter 19 says |
|---|---|---|
| `XAAA` | "stronger end pressure after an opening unmatched line" | It
floats rather than pushes; the final `A` is "a stopping place, but
without much fanfare." The instability is **the odd number of `A`s** —
line count and matched-element count disagreeing — not the opening `X` |
| `ABCBB` | the long `C` "shifts the spotlight to line five" | The long
`C` sticks out and *dims* line five by keeping line four from closing.
The **shortened** `C` is what brightens line five |
| `AABA` | "points forward toward another `AB`" | The `B` line asks for
another **`B`**, and the section balances at the opening couplet so
nothing pushes before it. Line four mildly **fools** that expectation,
leaving a small spotlight on the last line |

`XAAA` and `ABCBB` are inversions — a writer following either would
reach for
the structure that produces the opposite of the effect they wanted.
`AABA` is
incomplete rather than false: "points forward" is defensible, but it
drops both
the deception and the fact that the structure barely moves.

## The missing rule: line length beats rhyme

`prosody.md` gave the two-line ladder two rungs. Chapter 19 gives four,
and the
middle pair is the entire point:

1. matched length, matched rhyme — stops dead
2. matched length, **no** rhyme
3. **rhymed**, unmatched length
4. neither — leans forward hardest

Rung 2 outranks rung 3, and Pat draws the conclusion explicitly: line
length is
a stronger motion creator than rhyme. Nothing in the plugin carried
this. It is
not trivia — it is a revision-priority rule. When a section's motion is
wrong
and more than one element could be at fault, the line lengths are the
knob to
turn first. That now appears both in the stability reference and in the
revision
moves.

Also added from the same passage: the reason shorter-then-longer is more
stable
than longer-then-shorter. The longer line matches the shorter one's
length on
its way past — a foundation laid under the line above it.

## Closure had a vocabulary and no definition

`meter.md` instructs the reader to "distinguish deceptive closure from
unexpected closure." `stable-unstable-meta.md` has a Closure row reading
"Expected closure | Deceptive or unexpected closure." **No file in the
plugin
defined any of the three.** Chapter 19 defines them against listener
expectation, which is the only thing that separates them:

- **Expected** — resolves where the pattern promised.
- **Unexpected** — resolves where the ear predicted nothing. `XXAA`
surprises
without fooling, because lines two and three raised nothing to be wrong
about.
- **Deceptive** — resolves against a prediction the ear actually made.

`ABAAB` is where the chapter shows all three interacting, and it is now
the
worked case in the file. The practical consequence is recorded with the
definition: deceptive closure buys the brightest spotlight and therefore
carries
the strongest obligation to put something worth seeing in it — which is
the box
`response-filter` §3 gained in 0.7.1.

## Also corrected and added

- **A five-line section ending in an unmatched line is the most unstable
of its
group.** Chapter 19 states this flatly; the file had "usually depend on
how
late the matching material arrives." Unexpected closure is also named as
the
  mechanic organizing that whole group.
- **The rhyme-type scale collapsed two of its five tiers.** Chapter 18's
figure
  orders perfect, family, additive/subtractive, assonance, consonance as
  distinct rungs; the file paired the middle two.
- **Which line is the targeting slot.** An unmatched line's end sound
points
into the next section — aim it at a vowel inside the oncoming title for
a
sonic boost, at the title's end rhyme for a harder resolution, or spend
it on
nothing. `hook.md` already owns the hook-side strategy, so this is a
pointer
  plus the structural delta, not a second copy.
- **The order in which structure becomes audible** — rhythm, line
length, rhyme
structure, number of lines, rhyme type — which is also the order to
diagnose
  a section in.

## Chapter 15's deferred diagnostic, resolved

0.7.1 held back Chapter 15's opening diagnostic — a good line landing
flat is a
structure problem, not an inspiration problem — because its home was
either
`diagnose` or `prosody.md`, and Chapter 19 was next in the queue. The
probe was
whether Chapter 19 states the same thing in motion terms. It does, in
its second
paragraph: a writer who has not tuned into motion is left waiting on
lucky
accidents and divine inspiration. Home is `prosody.md`. `diagnose` is
not
touched, so its eval set needs no check.

## Verified correct

- **The four-line stability order is exactly right** — `AAAA`, `AABB`,
`ABAB`,
`XAXA`, `ABAA`, `XXAA`, `XAAA`, `AABA`, `ABBA`, `AAAX`, `AXAX`, `XAAX`,
`XXXX`, in the chapter's own sequence. So is the three-line order and
every
  six-line gloss.
- **The motion-notation rule is faithful** — same letter means same
rhyme, same
  stress count, same basic rhythm; omit the capitals when line-length
  arrangement and rhyme scheme disagree.
- **The five structural elements match Chapter 18 exactly.** This is a
third
independent confirmation that the list is the Five Compositional
Elements and
  not the Structural Pentad — the defect 0.7.1 fixed in `meter.md`.
- **The rhythm motion rules are faithful**, and so is the image
inventory
  (Ch18 `AUE`, Ch19 `AUF`).

## Figures

Both read as images, not inferred from text. `AUE` is the rhyme-type
resolution
scale; `AUF` is the "Amazing Grace" notation table showing how the
capital-letter shorthand is derived. Unlike Chapter 16's Exercise 20,
neither
carried content missing from the prose — but that is now a checked fact
rather
than an assumption.

## Held back deliberately

Chapter 19 draws distinctions that `prosody.md`'s lumped four- and
five-line
glosses flatten: `XXAA` surprising without fooling, `ABBA` floating,
`AAABB`
feeling "strangely stable," `ABBAA` needing three more `ABB` lines to
settle.
None of those glosses is *wrong* — they are thin. Rewriting them is its
own
pass, not a rider on a defect fix.

## Step 5 — evals

No eval set encodes a motion, closure, or stability claim; the three
files that
match those words do so incidentally. Second consecutive chapter pass
where step
5 came back empty.

## Verification

- `markdownlint-cli2` — 0 errors over 103 files
- `lychee --offline --include-fragments` — 0 errors, 687 OK
- `check-changelog-parity.sh` `--check` / `--check-bump origin/main` /
  `--check-order` — all clean
- `validate-plugins.sh` — passed
- No skill body changes on this branch; the skill-quality gate is
unaffected

## Related

- PR #2063 — the Chapters 14-17 pass this one stacks on, carrying 0.7.2.
It
also owns the `response-filter` §3 spotlight box that this pass's
deceptive-
  closure obligation depends on.
- Issue #2061 — the plugin cache is keyed by version number, so nothing
in
0.7.3 is reachable by a running session until an uninstall / install /
enable
  cycle runs after merge. Not closed here.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 10, 2026
…g against Writing Better Lyrics chapters 20-24 + appendix (#2114)

Continues the per-chapter source-fidelity pass. **Chapters 20-24 and the
Appendix of *Writing Better Lyrics* (2009)** read in full — Chapter 20
with its
figure, Chapter 21 across all four of its split spine items, Chapter 24
with
both of its figures. **This finishes Book 2.** Paraphrase only; no
chapter
prose, example writes, or student work reaches this public repository.

Two scopes, two commits, two version bumps: **0.8.1** (Ch 20-23 vs
`song-forms.md` / `form.md`) and **0.8.2** (Ch 24 + Appendix vs
`process.md` /
`co-writing.md` / the co-write opener template).

## The main finding

`song-forms.md` carried a **late-appended block that restated the
Chapter 22
and 23 repair strategies and got four of the six wrong** — each one
contradicting the correct statement earlier in the same file:

| Strategy | The block said | The chapter says |
|---|---|---|
| Ch 22 repair 3 | Give four verses four different jobs | Merge two
verses into one that shifts internally — **two** verses result |
| Ch 22 repair 2 | "Same content," recast structurally | Change
structure **and** the kind of information |
| Ch 23 alt 2 | Verse three still builds normally | The bridge
**replaces** the third verse |
| Ch 23 alt 1 → 3 | Convert to AABA by **dropping** the third verse |
Convert to AABA precisely so all three verse ideas **survive** |

The first is the consequential one: a writer following it keeps the
`v/v/ch/v/v/ch` shape that Chapter 22 exists to dismantle. The fourth
inverts
the condition that selects the form.

Each repair now states its resulting form explicitly, so the two
descriptions
in the file cannot silently drift apart again.

## Also fixed

- **"Four times is a lot."** was attributed to *Essential Guide to Lyric
Form
and Structure* (1991) Chapter 6 and labelled a paraphrase. It is
verbatim
from *Writing Better Lyrics* (2009) Chapter 22. The claim that the 1991
chapter shares the warning is left standing but flagged unverified —
that
  chapter has not been read yet.
- **"Im(potent) Packages"** parenthesised the wrong half of Pat's pun.

## Added

Five claims the files were missing, all checked against the chapters:

- `form.md` — Pattison names both readings of form-follows-function: on
one
section it *is* prosody, on two compared sections it *is* contrast. The
mechanics were present; the link to the plugin's own prosody vocabulary
was
  not.
- `form.md` — the musical-bar mechanism behind the "Years" chorus. The
stress
arithmetic (6 and 6) was there, but the prosody is in the setting: both
groups get four bars, so three phrases occupy the space two had and the
final
phrase compresses to one bar exactly where the lyric says time moves
fastest.
- `form.md` — a contrast-audit caution from the "Southern Comfort"
chorus:
three-stress phrases and a "3+" opening can look like contrast while
still
  leaning toward the verse's common meter.
- `song-forms.md` — an AABA song's last system is **bridge/verse**, not
a lone
verse (Ch 23); diagnose an unearned return across the whole B-to-final-A
unit.
- `song-forms.md` — the cost Ch 23 attaches to its first alternative:
returning
  to a full verse before the last chorus can still read as long.

## Checked and found correct

`form.md`'s Chapter 20/21 coverage is otherwise accurate — the balance
rule
keeps its two qualifiers, the four balance jobs match, the "Exercises to
preserve" list already carries Ch 20's Exercise 44 and Ch 21's
three-verse
condition. `phrasing.md` and `bridge.md` were checked and needed no
change.
The image-inventory claims are now verified rather than assumed: Ch 20
links
`image_rsrcAUG` (a verse/chorus rhyme-column comparison), and Chapters
21-23
link no images.

## Chapter 24 + Appendix (0.8.2)

**The Appendix finding is an attribution one.** The No-Free-Zone method
was
credited to Pat throughout `co-writing.md` and the printable session
opener. It
is **Stan Webb's** — he taught it to Pat in Pat's first professional
co-write,
and the Appendix thanks him by name. Pat carried it into Berklee and
added two
of the four rules (stay inside the song; no technical talk). Both files
now
credit Webb.

Two more in the same area:

- **The opener collapsed Webb's two distinct rules into one.** "Say
everything"
and "nobody says no / silence means more" do different jobs; merging
them
left "write crap" occupying a numbered slot as though it were a third
rule
  rather than the encouragement attached to the first two.
- **`co-writing.md` contradicted itself on solo application** — one
section
says two of four rules apply when writing alone, another says all four.
The
Appendix supports the looser reading, so the disagreement is now stated
with
  its evidence instead of left for a reader to hit.

Chapter 24 contributed material that existed nowhere in the plugin: five
named
rhyme-rejection criteria (including the "seems to mean more than it
conveys"
clunker test), the rule that the rhyming syllable must carry primary
rather
than secondary stress, **pattern lock** as a named failure mode (the
chapter's
bridge came out in the verses' meter on autopilot, and it catches itself
borrowing a specific Paul Simon bridge), and the form option that
**lost** —
dumping a verse is tested first and rejected on cause.

`image_rsrcAUJ.jpg` turned out to be load-bearing: the prose lists the
worksheet's five column headings and nothing under them, so the columns
exist
only in the figure — which independently confirms the
one-undifferentiated-column-per-core-word layout that 0.7.4 established
in
`worksheets.md`.

## Verification

`typos`, `markdownlint-cli2`, `lychee --offline --include-fragments`
(729 links,
0 errors), `validate-plugins.sh`, and `check-changelog-parity.sh`
(`--check`,
`--check-order`, `--check-bump origin/main`) all pass. Context-file and
template only, so the skill-quality gate does not apply.

Two review findings on the earlier commits were fixed in place: a P2
where a
new contrast note asserted an "eight lines" verse count that collided
with an
emphatic seven-phrase claim in `song-forms-examples.md` (the 2009 and
1991
books genuinely read that verse two ways, so the note now asserts
neither
count), and a P3 bare surname that broke this file's title-only
attribution
convention.

Plugin bumped to **0.8.1** then **0.8.2**. A 0.8.0 landed on `main`
mid-branch
(the skill frontmatter `name` removal); this branch was renumbered
accordingly
and `main` was merged in, so the gates above were re-run after the
merge.

## Related

No linked issue — this is a turn of the standing per-chapter
source-fidelity
pass over the Pattison context files.

- #2093 (0.7.4, Chapters 2/4/5), #2071 (0.7.3, Chapters 18-19), #2063
(0.7.2,
  Chapters 14-17) — prior turns of the same pass.
- #2061 — plugin cache is keyed by version number, not commit; until it
is
  fixed, testing 0.8.2 in a running session needs an
  uninstall/install/enable cycle.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 (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.

1 participant