music/HARMONY_AND_ARRANGEMENT_PRACTICE.md
CANON SUBORDINATION — this document is PROPOSAL-TIER: it serves canon and never outranks it.
Canon served: the composition floor and Josh's round-4 listening grade — that the accompaniment
CLASHES with the tune. This lane owns the vertical decision: what chord is chosen, which of its
members are voiced, in what register they sit, and what figure states them.
If this document disagrees with canon, CANON WINS and this document is the defect.
TIER: RESEARCH SYNTHESIS — PROPOSAL-TIER. This document is HOW, never WHAT. It sets no canon, names
no region content, and changes no spine or registry row. Every substantive claim carries a source
(URL, or book plus author plus chapter); where sources disagree the disagreement is stated; where a
statement is craft consensus rather than evidence it is labelled CRAFT CONSENSUS. Every principle
carries a PIPELINE HOOK line marked CODE-ABLE or MEASURE-ONLY, naming the file, the function and the
field.
WHERE THIS SITS AMONG ITS SIBLINGS, so it adds rather than repeats.
docs/proposals/music/craft_research/COUNTERPOINT_AND_VOICE_LEADING.md is the negative craft — how
simultaneous voices avoid destroying each other, Huron's six principles, the ERB spacing floor, the
fusion hazard. docs/proposals/music/craft_research/COUNTER_MELODY_AND_DIALOGUE.md is the positive
horizontal craft — how voices answer each other.
docs/proposals/music/craft_research/ORCHESTRATION_TEXTURE_AND_DENSITY.md is the census question —
how many layers and when they enter. None of the three answers the question that produced the round-4
grade, which is a question about the CHORD ITSELF: a texture can obey every voice-leading rule in
volume 1, carry a real counter-melody, and land inside the layer band, and still be built on a chord
whose members are not in the ensemble's scale. That is this document.
---
The finding is reproduced here rather than asserted, on harness/music_gen/harmony.py as it stands
in the working tree, for the mode the round-4 cue actually uses: D anhemitonic pentatonic, pitch
classes {D, E, F#, A, B} = {2, 4, 6, 9, 11}.
Calling harmony.build_plan for a 32-bar exploration cue WITHOUT the pitch_set argument — which is
how the plan was built before the repair described below — produces a 24-chord schedule containing
SIX pitch classes foreign to the ensemble's own scale: {0, 1, 3, 5, 7, 10} = {C, C#, D#, F, G, A#}.
The offenders, chord by chord, with the foreign pitch classes each contributes:
| chord | foreign pcs | chord | foreign pcs |
|---|---|---|---|
IV | {G} | imin9 | {C, F} |
IVadd9 | {G} | bVI | {F, A#} |
V | {C#} | Imaj9 | {C#} |
VI | {D#} | IVmaj7#11 | {C#, G} |
III | {C#, A#} | bIII | {C, F} |
Note which chord is NOT in that table. vi7 in D pentatonic is B–D–F#–A, every member inside the
scale; it is the one extension chord in the ambient pool that is innocent here. The clash Josh heard
is carried by IVmaj7#11, Imaj9, imin9 and the borrowed colour chords, and its severity is not a
matter of taste. It follows from a property of the mode:
**IN AN ANHEMITONIC PENTATONIC, EVERY FOREIGN PITCH CLASS IS A SEMITONE FROM AT LEAST ONE SCALE
MEMBER.** Computed over all seven non-members of D pentatonic: C is a semitone from B; C# from D;
D# from D AND E; F from E AND F#; G from F#; G# from A; A# from A AND B. Three of the seven are a
semitone from TWO scale tones. There is no safe import. The scale that guarantees no minor second can
occur INSIDE it — the property harmony.mode_is_anhemitonic exists to assert — guarantees that any
tone brought in from outside makes one. Section 4 states the perceptual consequence with its source.
That is the technical content of "the harmony clashes". It is not a voicing problem and it is not a
spacing problem; the ERB floor was doing its job. It is a VOCABULARY problem: the chord pools were
selected by cue class and by roman-numeral function, and nothing in the selection path asked whether
the resulting pitch classes existed in the music the rest of the ensemble was playing.
THE REPAIR THAT LANDED WHILE THIS LANE WAS READING, stated so this document is not read as describing
a live defect it does not describe. Between the first and second reads of the stack on 2026-08-08 —
harness/music_gen/pass7_flores.py at 16:41, harness/music_gen/harmony.py at 16:49 — a concurrent
lane wired pitch_set= through pass7_flores.t1_harmonic_plan into build_plan, and added H19
(out-of-set chord tones must be declared AND placed at a cadence), H20 and H21 to harmony.RULE_CODES,
taking it from eighteen codes to twenty-one. Re-measured after that landing, the same call WITH
pitch_set returns zero foreign pitch classes, keeps its cadence inventory intact
({HC: 1, deceptive: 1, plagal: 1, modal_close: 1}) and hits its non-functional target almost exactly
(0.3478 against 0.35). The mechanism in section 1 is therefore the DIAGNOSIS, verified reproducible,
and the constraint is armed. What sections 5 through 9 add is everything the constraint does not
cover — because an in-set chord schedule is necessary and nowhere near sufficient, and the measured
proof of that is in section 5.3.
---
Every source consulted for this document, with what it is authoritative FOR. Sources that could not
be retrieved in usable form are listed with that fact stated, because a source named but unread is
not evidence.
The standard American harmony text; authoritative for chord construction, doubling, spacing and
four-part part-writing discipline. The specific spacing prescription used below — adjacent upper
voices no more than an octave apart, the bass free to sit FURTHER below the tenor than an octave —
is the standard form of the rule, and the two current pedagogical statements of it consulted here
agree on the upper half and differ on the lower.
CORRECTED 2026-08-08 BY CITATION AUDIT: an earlier draft of this bullet reported both sources as
leaving bass-to-tenor entirely FREE. Neither does.
https://rwu.pressbooks.pub/musictheory/chapter/spacing-voicing-and-doubling-of-chord-tones-in-satb-style/
states "there should be no more than an octave between upper voices (soprano and alto, alto and
tenor), and no more than a twelfth between the tenor and bass" — a real ceiling, not freedom.
https://mymusictheory.com/satb-harmony/satb-doubling-omissions-spacing/ states a MINIMUM rather
than a maximum — "keep a minimum of a 5th between tenor and bass" — and its worked example marks a
chord whose bass and tenor are more than an octave apart as correctly spaced. What both sources
support is that bass-to-tenor may EXCEED an octave, not that it is unbounded. §3.2, §7.2 and HA-10
are written to the corrected reading.
HONEST LIMIT: the Piston text itself was not retrievable in full; the rule is cited to the
pedagogical consensus that states it identically, and Piston is named as its canonical home rather
than quoted.
(University of California Press). Archive copy at https://archive.org/details/theoryofharmony0000scho.
Authoritative for chord CONNECTION as opposed to chord construction: the harmonic band, the law of
the shortest way, and the classification of progressions into ascending, descending and
super-strong. Schoenberg's rules were retrieved in formalized form from a computational model of
them — the Strasheela constraint-programming implementation at
https://strasheela.sourceforge.net/strasheela/doc/Example-Schoenberg-TheoryOfHarmony.html — which is
the most directly usable form for our purposes because it is already stated as constraints.
1961). Authoritative for the non-tertian vocabulary this project actually needs: chords by fourths
and fifths, added-note chords, polychords, pandiatonicism. Archive copy at
https://archive.org/details/isbn_9780393095395. The one prescription quoted below (page 94, on the
rootlessness of quartal chords) is cited via
https://en.wikipedia.org/wiki/Quartal_and_quintal_harmony, which gives the page reference.
practitioner text for composing IN modes rather than analysing them — hybrid and slash chords,
modal chord vocabulary, avoiding functional pull. HONEST LIMIT, SHARPENED 2026-08-08 BY CITATION
AUDIT: an earlier draft advertised an archive copy at
https://archive.org/details/MillerRonModalJazzCompositionAndHarmony. That identifier exists but the
item is DARKENED — the archive metadata API returns is_dark: true and the details page returns
404 — so it serves no copy and must not be presented as one. No retrievable full text was obtained
by any route; the book is named as the field's authority and NO specific rule in this document is
attributed to it. Where a modal-vocabulary rule appears below it is sourced to
Persichetti, to Belkin, or to the Berklee chord-scale literature.
source of the avoid-note definition used in section 4: the pitches of a chord scale not used
harmonically because they destabilize the sound of the chord. Definition and the semitone criterion
confirmed at https://en.wikipedia.org/wiki/Avoid_note, which cites Nettles (Harmony 3), Terefenko
and Haerle. CORRECTED 2026-08-08 BY CITATION AUDIT: an earlier draft of this bullet also cited the
Berklee glossary at https://college.berklee.edu/core/glossary.html as carrying the same definition.
That page is real and is Berklee's own glossary, but it holds NO entry for "avoid note" — a
full-text fetch returns zero occurrences of the word. It defines "tension" and "chord scale" and is
usable for those two terms only. The avoid-note definition therefore rests on the Wikipedia carrier
of Nettles, Terefenko and Haerle, and on nothing else this lane could retrieve.
public-domain text at https://www.gutenberg.org/files/33900/33900-h/33900-h.htm. Chapter III,
"Harmony", is the single most directly applicable source in this document and is quoted below from
its sub-sections "Distribution of notes in chords" (page 67), "Duplication of timbres" (page 77) and
the Remarks following it (pages 78-79). NOTE FOR THE AUDIT: the sibling document
ORCHESTRATION_TEXTURE_AND_DENSITY.md §2.1 records that automated retrieval would not return the
body of Chapter III and correctly declines to claim from it. That limit no longer holds — the
chapter body was retrieved for this document by downloading the Gutenberg HTML and extracting it
locally rather than by remote summarisation. The sibling's honest limit should be updated, not
contradicted.
free use with attribution). PDF at
https://noty-bratstvo.org/sites/default/files/instr-artistic-orch-a-belkin_0.pdf, author's site
https://alanbelkinmusic.com/. Authoritative for planes of tone, register disposition, and orchestral
accompaniment — the sections "Planes of Tone", "Musical Lines vs. Instrumental Parts", "Register"
and "Orchestral Accompaniment" are quoted below.
https://alanbelkinmusic.com/general-principles-of-harmony/ — specifically
https://alanbelkinmusic.com/general-principles-of-harmony-coherence-and-continuity/,
https://alanbelkinmusic.com/general-principles-of-harmony-movement-interest-and-variety/,
https://alanbelkinmusic.com/general-principles-of-harmony-harmony-texture-and-orchestration/ and
https://alanbelkinmusic.com/general-principles-of-harmony-criteria-for-evaluating-harmony/.
This is the most useful single source in the document for our problem, because Belkin writes for
COMPOSERS choosing a harmonic language rather than for students realising figured bass, and because
he states the criteria as perceptual rather than stylistic.
https://wwnorton.com/books/9780393920659 — the modern pedagogical standard, authoritative for layer
roles and doubling. **Alfred Blatter, *Instrumentation and Orchestration*** (2nd ed.),
https://archive.org/details/instrumentationo0000blat_u5w6. **Ertugrul Sevsay, *The Cambridge Guide
to Orchestration*** (CUP, 2013), https://archive.org/details/cambridgeguideto0000sevs. All three are
characterised at length in ORCHESTRATION_TEXTURE_AND_DENSITY.md §2.3-§2.5 and are NOT re-derived
here; this document cites that sibling rather than duplicating its source work.
score into melody, secondary melody, harmonic support, rhythmic support and bass — the five-role
texture model this document's §7.1 builds on. Characterised, with its DeVoto assessment, in
ORCHESTRATION_TEXTURE_AND_DENSITY.md §2.2 (https://sites.tufts.edu/markdevoto/files/2015/10/Piston.pdf).
Principles", *Music Perception* 19(1), 2001, pp. 1-64.**
https://online.ucpress.edu/mp/article/19/1/1/62106/Tone-and-Voice-A-Derivation-of-the-Rules-of-Voice,
DOI https://doi.org/10.1525/mp.2001.19.1.1. The paper's six core principles are already worked
through in COUNTERPOINT_AND_VOICE_LEADING.md §2.1 and are not restated here. What this document
takes from it is one principle only, because one principle is what the spacing and low-interval
question rests on: the MINIMUM MASKING PRINCIPLE — to minimise auditory masking within a vertical
sonority, approximately equivalent amounts of spectral energy should fall in each critical band,
which for ordinary harmonic tones means simultaneously sounding notes should be more widely spaced
as the register descends. HONEST LIMIT: the full paper is paywalled and the open-access mirrors
(SciSpace, Academia, ResearchGate) all returned 403; the principle statement is taken from
secondary reporting of it and is consistent with the treatment in the sibling document, which
worked from the same principle to derive our ERB table.
book-length form of the same programme. Named for completeness; not quoted.
ERB(f) = 24.7 (0.00437 f + 1) Hz. Already implemented in harmony.erb_floor_table with its
derivation written out in the docstring; cited here only because §8 compares it to the craft tables.
— the clearest statement of the CAVEATS, which are the part of the table that matters: soft low
voicings on strings are more forgiving than loud ones on brass; when a voicing's lowest note is not
the root you must assume the root is present when checking; the chart is a guideline that may be
deliberately ignored for effect.
on direct fetch; definition confirmed via search result text) and **David Darling, *Encyclopedia of
Science* music entry**, https://www.daviddarling.info/encyclopedia_of_music/L/low_interval_limit.html
— both give the same definition: the lowest point of an interval, from minor second to major tenth,
below which the interval begins to sound muddy or indistinct, and both state explicitly that the
limits are not absolutes.
and Jim Funnell, "Low Interval Limits",
https://funnelljazz.eu/wp-content/uploads/2020/12/Low-Interval-Limits.pdf.
numeric table as an ENGRAVED IMAGE — a GIF or a Finale-set PDF whose glyphs carry no extractable
text. Four independent attempts returned the definition and the caveats and never the numbers. This
document therefore states the low-interval-limit PRINCIPLE and its caveats as sourced, and states NO
numeric craft table, because a table of note names reconstructed from memory would be exactly the
kind of fabricated precision this series exists to avoid. Section 8 says what we use instead and why
that is defensible.
Press, 2018), https://global.oup.com/academic/product/hollywood-harmony-9780190606404, chapter
"Pantriadic Wonder" at https://academic.oup.com/book/3654/chapter-abstract/144996319. The
book-length analytical study of how film scoring evokes WONDER through non-functional "pantriadic"
chromaticism — chord succession organised by triadic voice-leading economy rather than by tonal
function. This is the scholarly name for what our non_functional_target dial is turning, and it
matters to us for one reason stated in §3.4: pantriadic wonder is built from CONSONANT TRIADS moving
chromatically, not from extension chords sitting still.
HONEST LIMIT ADDED 2026-08-08 BY CITATION AUDIT: the book and the chapter page are real — the OUP
chapter URL resolves under the *Hollywood Harmony* title — but both OUP hosts refuse automated
fetches (403 from academic.oup.com, an empty bot-challenge body from global.oup.com), so the chapter
abstract could not be read back on audit. The characterisation above is retained as a PARAPHRASE of
the book's thesis, and the verbatim phrase an earlier draft quoted in §3.4 has been de-quoted there
for the same reason.
https://gdcvault.com/play/1012601/ — examines music for its textural components, melody, harmony,
rhythm and form, to expose how those elements can be manipulated for adaptive integrity.
GDC Vault, "Implementing an Adaptive, Live Orchestral Soundtrack",
https://www.gdcvault.com/play/1013209/Implementing-an-Adaptive-Live-Orchestral. **GDC Vault,
"Digital Orchestration for the Video Game Composer"**,
https://gdcvault.com/play/1015338/Digital-Orchestration-for-the-Video. Listed as the game-side
practice literature; the Vault serves session abstracts rather than transcripts to an unauthenticated
fetch, so these are named as the field's talks and no specific rule below is attributed to them.
https://en.wikipedia.org/wiki/Quartal_and_quintal_harmony — used as the citation carrier for the
Persichetti page reference and for the So What voicing's construction. Wikipedia, "Avoid note",
https://en.wikipedia.org/wiki/Avoid_note — used as the citation carrier for Nettles/Graf.
COUNTERPOINT_AND_VOICE_LEADING.md (Huron's principles, the ERB floor, the deliberate clash),
COUNTER_MELODY_AND_DIALOGUE.md (the tension ordering by interval class),
ORCHESTRATION_TEXTURE_AND_DENSITY.md (the orchestration canon, masking, frequency-slot allocation),
and docs/proposals/music/school_grammars/SNES_JRPG_SCHOOL.md (HARM-01 through HARM-07, ECON-03,
ECON-10). These are cited by filename and section throughout rather than re-derived.
---
Schoenberg's contribution to our problem is not his chord vocabulary but his account of what makes
two chords CONNECT. The Strasheela formalization of *Harmonielehre*
(https://strasheela.sourceforge.net/strasheela/doc/Example-Schoenberg-TheoryOfHarmony.html) states the
rules as constraints, which is the form we need:
the same voice.
formulation to Bruckner.
occur in the first but a harmonic band exists; DESCENDING when a band exists and the second chord's
root was already present as a non-root tone of the first; SUPER-STRONG when there is no band at all.
C1-C3 is ascending. A descending progression is licensed by what follows it, not by itself.
the dissonant tone — resolves downward by step.
of the underlying scale.
The first two are already implemented: harmony.voice_chord ranks candidate voicings by common-tone
retention plus minimal motion, and its docstring cites COUNTERPOINT_AND_VOICE_LEADING.md VL-5 for
exactly that. The last four are not implemented anywhere in our stack and three of them are directly
useful to us. In particular the CADENCE CRITERION is a striking result for a mode-constrained
pipeline: it says a cadence is the moment the scale is completed, which is a definition that survives
the loss of the leading tone entirely. In D pentatonic a five-note scale is completed by very few
chords, which is why harmony.build_plan labelling a leading-toneless close modal_close is
defensible — but the criterion gives us a way to MEASURE whether the close earns the label instead of
merely being assigned it.
cadence_completes_scale predicate to harmony.build_plan'sreport: over the last N chords ending at each cadence bar, the union of pitch classes against
mode_pcs(mode). Report the fraction covered. A modal_close covering three of five pentatonic
degrees is a weaker close than one covering five, and today the two are indistinguishable in the
report.
harmony.check rule over HarmonicPlan.chords: classify each adjacent pair as ascending, descending or super-strong from the
root and pitch-class membership alone, then refuse a descending pair whose enclosing C1-C3 is not
ascending. This is a purely symbolic test on data the plan already holds.
The standard four-part discipline, in the form the pedagogical consensus states it and Piston
canonises: adjacent UPPER voices — soprano to alto, alto to tenor — must not exceed an octave, while
the bass is permitted to sit further below the tenor than an octave. HOW MUCH further is where the
pedagogical statements part company — RWU caps the tenor-to-bass distance at a twelfth, MyMusicTheory
sets only a lower bound of a fifth and marks a greater-than-octave bass-to-tenor gap as correctly
spaced, and neither licenses an unbounded gap
(https://mymusictheory.com/satb-harmony/satb-doubling-omissions-spacing/,
https://rwu.pressbooks.pub/musictheory/chapter/spacing-voicing-and-doubling-of-chord-tones-in-satb-style/).
harmony._upper_spacing_ok implements the upper-voice half precisely, and its own docstring states
the asymmetry: adjacent upper voices within an octave, bass-to-tenor unbounded. The unbounded half is
OUR choice rather than a convention either source states, which is what HA-10 is about. It is enforced as a FILTER on the
candidate voicing set inside voice_chord, and re-checked as rule H04 in harmony.check. This part of
the practice is done, correctly, and the rest of this document does not revisit it.
Doubling is the part that is only half done. harmony.MAX_THIRD_DOUBLINGS = 1 caps third-doubling and
H07 audits it, which covers the classic prohibition. What is absent is the positive doctrine — the
double_policy parameter on voice_chord defaults to "root_then_fifth" and is accepted but the
policy is not connected to a source, to a register rule, or to the timbre of the doubling part. §7.3
supplies the missing doctrine from Rimsky-Korsakov and Belkin, who both treat doubling as an
EXPRESSIVE choice with a register law attached rather than as an error to be avoided.
Our harmony._function_of assigns T, S, D or COL to a chord from its root interval and quality, and
build_plan schedules by those functions. This is correct and it is also, in a pentatonic mode,
mostly ceremonial: the functional pull of a dominant comes from the leading tone's semitone ascent and
the tritone's resolution, and an anhemitonic pentatonic contains neither. in_set_chords's own
docstring makes the argument honestly, citing SNES_JRPG_SCHOOL.md HARM-02 that a dominant substitute
working "via voice-leading rather than leading-tone pull" is grammar and not a compromise.
The consequence for this lane is a boundary statement rather than a rule: functional labels in a
pentatonic cue are a SCHEDULING device — they distribute chords so the plan does not sit on one
sonority — and they are not a claim about pull. Any measurement that grades a pentatonic cue on
functional cadence strength is measuring an artefact of the labelling. harmony.check H17 (cadence
schedule) and H16 (non-functional ratio) should both be read in that light, and their reports should
say so.
Lehman's *Hollywood Harmony* is the scholarly treatment of exactly the affect our exploration and
wonder cues are chasing, and its central finding cuts against the instinct our chord pools encode.
Film's wonder idiom is built from CONSONANT TRIADS moving by chromatic third-relations and other
voice-leading-economical progressions — "pantriadic" chromaticism, which Lehman characterises as a
negation of the tonal norms of centricity, diatonicity and functionality
(https://academic.oup.com/book/3654/chapter-abstract/144996319; DE-QUOTED 2026-08-08 BY CITATION
AUDIT — the OUP page refuses automated fetches, so this wording is a paraphrase and must not be
re-quoted as Lehman's own sentence without a copy of the chapter in hand). The wonder comes from the
MOTION between simple sonorities, not from the internal complexity of a stationary one.
Our _POOL_AMBIENT encodes the opposite bet: for cue_class in ambient, wonder or exploration it
appends Imaj9, imin9, IVmaj7#11, vi7 and IVmaj7 to the functional pool — five chords whose
wonder is meant to come from their extensions. That is a jazz-ambient reading of wonder rather than a
cinematic one, and in a pentatonic mode it is also the exact mechanism that produced the six foreign
pitch classes in §1. The _pool_chords comment in build_plan already noticed half of this — it
records that stacking the ambient pool moved extension density while leaving the HARM-04 non-functional
ratio at zero, because sevenths and ninths on functional roots are still functional. The other half is
the finding here: extension-density wonder is not the film idiom's wonder, and in a five-note mode it
is unreachable without importing semitone neighbours.
build_plan a second wonder mechanism beside _POOL_AMBIENT: atriadic chromatic-mediant option that reaches wonder by MOTION between consonant triads. Inside a
declared pitch_set this will usually resolve to the mode's own two or three triads plus the sus and
quintal stacks, which is the right answer — the point is that the wonder dial should be able to turn
toward motion instead of only toward extension.
---
Nettles and Graf define an avoid note as a pitch of a chord scale not used harmonically because it
destabilizes the sound of the chord (https://en.wikipedia.org/wiki/Avoid_note, citing Nettles,
Harmony 3; Terefenko; Haerle). The criterion is a SEMITONE relationship to a chord tone: F against a C
major triad is the standard example, an avoid note because it lies a semitone above the third.
CORRECTED 2026-08-08 BY CITATION AUDIT: an earlier draft added that the Berklee glossary
(https://college.berklee.edu/core/glossary.html) carries the same definition. It does not — that page
has no "avoid note" entry at all. This definition has ONE retrievable carrier, named above.
Two qualifications that the literature is emphatic about, and that a naive implementation gets wrong:
neighbouring tone. The Wikipedia treatment states the misunderstanding explicitly — avoid notes are
not to be avoided altogether. Our harmony.snap_structural_tones already encodes the correct shape
of this distinction for the melodic side, moving STRUCTURAL tones to chord members and leaving
ornamental ones alone.
same degree becomes a colour: the #11 is the standard demonstration. This is why IVmaj7#11 exists
as a quality at all, and why it is nevertheless the worst possible chord for D pentatonic — in D the
IV chord is rooted on G, its #11 is C#, and C# is a semitone below the tonic D that every other layer
in the ensemble is playing.
This gives the reciprocal rule, which is the one our engine needs, because our engine is choosing the
CHORD and the MELODY is already fixed by the mode:
**A CHORD TONE THAT LIES A SEMITONE FROM ANY PITCH CLASS OF THE ENSEMBLE'S SCALE IS AN AVOID TONE OF
THAT CHORD.** Not of the scale — of the chord. The chord is the thing being chosen, so the chord is
where the constraint belongs.
§1 proved it for D: all seven non-members are semitone-adjacent to at least one member. The general
statement is a counting argument. An anhemitonic pentatonic occupies five of twelve pitch classes with
no two adjacent, so its five members have ten distinct semitone neighbours by position; with twelve
positions and five occupied, seven remain, and ten neighbour-slots distributed over seven positions
means every remaining position is a neighbour of at least one member and three are neighbours of two.
The scale's own protective property — the one harmony.mode_is_anhemitonic tests, and the one
COUNTERPOINT_AND_VOICE_LEADING.md MOD-1 relies on for the claim that four independent parts cannot
produce a minor second — is precisely what makes it maximally exposed to imported tones.
harmony.mode_is_anhemitonic's docstring already carries an important qualification of MOD-1, that
the scale removes the minor-second row of the ERB table and leaves the major-second row maximally
reachable. The finding here is a second qualification in the same spirit and it should sit beside it:
the scale removes the internal minor second and makes every EXTERNAL tone produce one.
semitone_neighbours(pitch_set) helper to harmony.py returning,for a declared pitch set, the map from each foreign pitch class to the scale members it is a semitone
from. Feed it into H19's finding text so a refusal reads "C# is a semitone below D, which the pokok,
both kotekan parts and the ornament layer are playing" instead of "out-of-set pitch class 1".
A finding that names the collision is a finding an author can act on.
declared and placed at a cadence. Add the severity gradient the theory gives for free: an out-of-set
chord whose foreign tones are semitone-adjacent to TWO scale members is a harder event than one
adjacent to one, and the hardest of them should require an arrival bar rather than any cadence.
COUNTERPOINT_AND_VOICE_LEADING.md §6 already establishes that a clash is an expressive object when
it is placed and prepared, and build_plan's own docstring cites the two sources for placement — the
"IT IS PLACED, NOT SPRINKLED" line from volume 1 and Bolero's single harmonic event from the
orchestration sibling. Nothing in §4 revises that. The rule is about the DEFAULT: the ordinary bar gets
an in-scale chord, and the semitone is an event with a position. That is exactly the shape H19 already
enforces, and §4.2's hooks sharpen its teeth rather than replacing it.
---
Persichetti's finding is the load-bearing one, and it is a warning as much as a licence: "Chords by
perfect fourth are ambiguous in that, like all chords built by equidistant intervals, any member can
function as the root" (*Twentieth-Century Harmony*, p. 94, quoted via
https://en.wikipedia.org/wiki/Quartal_and_quintal_harmony). The consequence the same source draws is
the one that matters to an automated pipeline: because the chord does not assert a root, the
responsibility for establishing the harmony falls on the melodically active voice.
The canonical jazz instance is the So What voicing — three stacked perfect fourths topped by a major
third, analysable as a minor seventh in root position or a major seventh with the third in the bass
(same source). Quartal voicings became the modal idiom's signature precisely because their ambiguity
blends: they do not fight a modal melody for the identity of the harmony, because they are not
claiming one.
This is a perfect fit for our problem and a real hazard at the same time, and both halves must be
stated:
third that the pentatonic melody does not have. harmony.CHORD_QUALITIES already carries quintal
= (0, 7, 14) and its comment already says exactly this — the one quality with no third at all, the
safe choice when a pentatonic melody would otherwise fight a chordal third outside its scale.
create momentum, while equidistant intervals produce a static effect
(https://alanbelkinmusic.com/general-principles-of-harmony-movement-interest-and-variety/). A chord
built entirely of fourths or fifths is equidistant by construction. A cue built entirely of them is
therefore static by construction, which is a different defect from clashing and is equally audible.
The remainder of the modal vocabulary sits between the quartal stack and the triad. sus2 and sus4
replace the third with a second or fourth, keeping a root and a fifth so the chord still asserts a
root while dodging the third. Added-note chords — maj6 and add9 in our roster — keep the triad and
colour it with a scale member rather than an imported one; Persichetti treats added-note chords as a
category in their own right, not as incomplete sevenths.
The practical rule this yields for pentatonic writing is arithmetic rather than aesthetic: in D
pentatonic, D–E–F#–A–B, a D major triad plus its sixth (B) plus its ninth (E) uses only scale members,
so I6 and Iadd9 are colour that costs nothing. harmony.in_set_chords finds them without being
told to, and this is worth stating plainly because it is the strongest single piece of evidence that
the enumeration approach is right: asked which chords of any known quality fit wholly inside
{D, E, F#, A, B}, it returns fourteen —
I, Iquintal, Isus2, I6, Iadd9, vi, vi7 (tonic function); IIquintal, IIsus2, IIsus4
(subdominant); Vquintal, Vsus2, Vsus4 (dominant); VIsus4 (colour)
— which is, item for item, the vocabulary the modal-jazz and film-modal literature prescribes: a
tonic/relative-minor pair, added-sixth and added-ninth colour on the tonic, sus chords on the second
and fifth degrees, and stacked fifths. The code and the practice converged without being introduced,
which is the strongest form of confirmation available to us.
Convergence is not sufficiency, and the measurement says so. Building the same 32-bar exploration cue
WITH pitch_set armed and taking the quality census of the resulting 24 chords:
| quality | count | has a third |
|---|---|---|
quintal | 9 | no |
sus4 | 5 | no |
sus2 | 3 | no |
maj | 4 | yes |
min | 2 | yes |
add9 | 1 | yes |
Seventeen of twenty-four chords contain no third at all. The TERTIAN SHARE is 0.292. By Persichetti
the harmony is therefore rootless for seventy-one percent of the cue and the melody must carry the
identity alone; by Belkin the harmony is equidistant-static for the same seventy-one percent. Both
authorities describe the same output and both call it a problem, and no rule in harmony.RULE_CODES
measures it. The repair for the clash, applied without a counterweight, produces a washy cue —
correctly in-scale, and harmonically inert.
The counterweight is not to loosen the pitch set. It is to schedule the tertian sonorities where they
do structural work. The measured cadence chords of the same plan are Vquintal at bar 8, vi at 16,
I at 24 and I at 32: three of four cadences already land on a chord with a third, which is the
right instinct arrived at by accident — the enumeration's ranking puts the simplest sonority first
within a function, and triads are simplest. Making it deliberate is one predicate.
tertian_share figure to HarmonicPlan.report and a harmony.check rule over it, with a floor rather than a ceiling. The floor is a band, not a number
— a pentatonic cue cannot reach the tertian share of a diatonic one and should not be graded as
though it could — and the band must be calibrated on the exemplar corpus before any threshold is
set, per the standing rule in COUNTER_MELODY_AND_DIALOGUE.md §9 that a target derived from our own
generator's output is not a bar.
build_plan._role, rather than letting the function ranking decide by accident. A modal half
cadence on a quintal chord is idiomatic and should stay reachable; a full close on one is a close
that never happened.
Two further techniques appear throughout the practitioner literature for harmonising modal and
pentatonic material and are recorded here for completeness. TRIAD PAIRS harmonise a melody by
alternating two triads drawn from the mode, choosing whichever contains the current melody note as a
chord tone — a technique that turns the harmonisation problem into a lookup. PLANING moves a fixed
intervallic shape in parallel through the scale, which is the Debussy-modal signature and which Belkin
explicitly licenses when it is consistent, noting that parallel fifths are acceptable in Debussy
because they serve a consistent aesthetic
(https://alanbelkinmusic.com/general-principles-of-harmony-criteria-for-evaluating-harmony/).
Both are declined as pipeline work for now, for one reason each. Triad pairs are subsumed by
in_set_chords plus snap_structural_tones, which already solve the same problem more generally.
Planing collides head-on with harmony.check H01, undeclared parallel perfects, and the collision is
already handled by the correct mechanism — H01's declared_mud_pairs licence, whose whole design is
that a parallel is design when declared and a defect when not. Planing is therefore available today to
any card willing to declare it, and needs no new code.
---
Belkin, in the chapter on coherence, names persistent common tones as the simplest audible coherence
device and identifies it directly with the classical pedal point: using persistent common tones,
especially in the same octave, generates the simplest kind of audible coherence
(https://alanbelkinmusic.com/general-principles-of-harmony-coherence-and-continuity/). In the same
chapter he names the mechanism that our pitch_set argument IS, without knowing about it — that
harmonic coherence comes from limiting pitch content into FAMILIES OF CHORDS with clearly audible
resemblances, and that the more elements kept common within a harmonic family, the easier the harmonic
character is to perceive. He lists scale-or-mode-based pitch limitation first among the unifying
mechanisms.
That is an independent authority for the repair that landed in §1, and it is worth recording as such:
the mode constraint is not a defensive patch, it is the primary coherence device of the idiom, and
Belkin would have prescribed it before the clash rather than after.
The drone's specific virtue for us is that it is the one accompaniment device that cannot clash. A
sustained tonic and fifth under a pentatonic melody contributes two pitch classes, both of them scale
members by definition, and it supplies the root that §5.1 says the quartal stacks fail to assert.
Persichetti's problem and Belkin's problem have a common solution.
harmony.ACCOMPANIMENT_FIGURES includes pedal, harmony.accompaniment realises it with one
re-articulation per bar across the whole plan, pass7_flores._pedal_span derives a pedal device from
a declared pedal layer and passes it into build_plan as a device, and pass2_realise.compile_pattern
carries a drone kind at its own compile branch. The machinery exists. What is missing is the
DOCTRINE that decides when to use it, and one specific capability:
TONIC pedal (stability, arrival, home) from the DOMINANT pedal (tension, expectation, the classic
pre-cadential device) and the DOUBLE pedal (tonic plus fifth, the open drone of the modal idiom).
Give _pedal_span a kind field of those three and let build_plan read it: a dominant pedal
should bias the chords above it toward the dominant-function in-set chords and toward a cadence at
its end, which is what a dominant pedal MEANS. Today the pedal's pitch class is tonic by
construction (plan["key"]["tonic_midi"] % 12) and no other kind is reachable.
duration during which at least one sustaining layer holds a scale member for a full bar or more.
This is the measure of how much of the cue is protected from clash BY CONSTRUCTION, and it is
cheap to compute from the compiled parts.
own criteria name the failure — grayness and lack of direction
(https://alanbelkinmusic.com/general-principles-of-harmony-criteria-for-evaluating-harmony/). Report
drone coverage against the ECON-03 pad share (harmony.PAD_SHARE_CEILING = 0.20) rather than
separately, so a cue cannot dodge the pad ceiling by relabelling its wall of pads as a drone.
---
This section is where Rimsky-Korsakov's Chapter III earns its place, because it states as arithmetic
what most sources state as taste.
Piston's *Orchestration* decomposes a score into melody, secondary melody, harmonic support, rhythmic
support and bass, and studies how composers distribute those functions across the ensemble
(characterised in ORCHESTRATION_TEXTURE_AND_DENSITY.md §2.2). Belkin's parallel account is
perceptual rather than functional and adds the crucial hierarchy: a PLANE OF TONE is one instrument or
a blended group sharing one rhythmic outline, planes are differentiated by perceptual prominence into
foreground and levels of background, and the composer must have a clear idea of what is foreground and
what is background at any moment or confusion results
(*Artistic Orchestration*, "Planes of Tone"). His mechanisms: BLEND within a plane through similarity
of colour and rhythm, close spacing with no gaps, and balance; DIFFERENTIATION between planes through
contrast of register, timbre and rhythm. The foreground is louder, in a strongly characteristic
timbre, and prominently placed. PRECISION ADDED 2026-08-08 BY CITATION AUDIT: Belkin's own list of
background kinds has FOUR entries, not two — secondary contrapuntal lines, figurations that add
animation, harmonic masses, and resonance. The two-way MOVEMENT versus RESONANCE split used below is
this document's compression of that list into a schema, offered as our simplification and not as
Belkin's taxonomy.
Our plan schema carries pattern.kind and a melodic_role proposal from the counter-melody lane, and
between them they cover foreground and movement. RESONANCE as a distinct background role — the layer
whose job is neither tune nor motion but the ringing frame under both — is not represented, and it is
the role the drone and the pad are actually filling.
plane to the layer schema with values foreground, movement, resonance and frame, orthogonal to pattern.kind, and require every layer to declare one.
Then Belkin's rule becomes checkable: at any instant there is exactly one foreground plane, and a
cue with three simultaneous foreground planes is refused rather than merely dense.
Rimsky-Korsakov, Chapter III, "Distribution of notes in chords" (page 67,
https://www.gutenberg.org/files/33900/33900-h/33900-h.htm), states the natural-harmonic-scale
disposition as the guide to orchestral chord arrangement: the widely-spaced intervals lie in the lower
part of the scale, gradually becoming closer as the upper register is approached. He then adds three
prescriptions:
empty intervals, especially in forte; in piano such distribution may be possible.
The Remarks after "Duplication of timbres" (pages 78-79) restate the disposition as an explicit
register table — a chord of extended range is distributed with wide intervals, octaves and sixths, in
the bass; lesser intervals, fifths and fourths, in the middle; and close intervals, thirds or seconds,
in the upper register — and add that modern orchestrators do not allow any void in the intermediate
parts, that empty spaces are especially bad in forte, and that widely divided harmony can be used only
seldom and only in piano.
Belkin states the same law independently and in the same direction: the normal disposition follows the
overtone series, wider in the lower range and more compact getting higher, with no major gaps in the
middle, since such gaps divide the sound mass into separate planes — desirable only when
differentiation is wanted (*Artistic Orchestration*, "Register"). And in the harmony book: wider
intervals on the bottom and smaller intervals above create blended resonance, clear acoustic intervals
such as octaves and fifths on the bottom ground the harmony, and pitch clarity is greatest in the
middle register
(https://alanbelkinmusic.com/general-principles-of-harmony-harmony-texture-and-orchestration/).
Three authorities, one law, and it is the same law Huron's minimum-masking principle derives from
critical bands. This is as well-founded as anything in this series.
MEASURED AGAINST OUR OUTPUT. Voicing the 24-chord in-set plan through harmony.voice_chord with the
parameters pass7_flores.rewrite_harmony_grid actually uses — n_voices=4, low=31, high=64 from
GRID_VOICES and GRID_REGISTER — and comparing the bottom gap to the top gap of each four-note
voicing:
the cue.
exactly where he says it is worst.
Iquintal voices as MIDI [38, 45, 52, 62] — gaps of 7, 7 and 10 semitones. Aminor seventh of empty air between the third voice and the top, sitting above two perfect fourths.
The ERB floor is not at fault and is in fact working: measured across the same 24 voicings, the count
of intervals of a third or narrower whose lower note falls below C3 is ZERO. voice_chord is
correctly refusing muddy low intervals. It simply has no opinion about the SHAPE of the stack above
them, because no rule was ever written for the shape.
voice_chord's RANKING, not its filter — thelaw is a strong preference, not an absolute, and Rimsky says "rarely" and "seldom" rather than
"never". Score each candidate voicing by the monotonicity of its gap sequence from bottom to top and
break ties toward wide-low. This changes no interface and cannot make a voicing illegal that is
legal today.
hard: refuse any candidate voicing whose largest gap is both above the lowest voice and wider than
the gap below it by more than a declared margin, unless the card declares a hollow texture. Belkin
licenses hollow textures explicitly and warns that the ear tires of them quickly and that loud
passages with holes in the middle sound feeble, which is exactly the shape of a declared exception.
RECORD THE SPREAD in the code comment. The three positions are closer together than an earlier
draft of this document claimed: Rimsky says the bass should RARELY lie more than an octave below
the part above it, the RWU statement of the chorale convention caps the same distance at a TWELFTH,
and our _upper_spacing_ok bounds it NOT AT ALL. Ordered by strictness the sources run Rimsky,
then RWU, then us — so our code is the outlier rather than the arbiter between two authorities.
Our renderer is orchestral, so Rimsky's preference is the better default and the ranking term
should implement it; _upper_spacing_ok's docstring should record that its unbounded treatment
matches neither source.
Rimsky, Chapter III, "Duplication of timbres" and its Remarks: in a four-part wind chord the two
EXTREME parts are the thinnest and weakest in tone and the intermediate parts the fullest and
strongest; where correct part progression demands a temporary doubling the ear is reconciled to the
brief loss of balance; and in every chord the parts in octaves strengthen one another, the harmonics
of the lowest register coinciding with and supporting the highest.
Belkin's rule is the same one stated as intent: doublings should be intentional and expressive rather
than rigidly avoided, doublings emphasising bass notes add more solidity than doublings of middle
notes, and adjacent doublings are more noticeable than non-adjacent ones
(https://alanbelkinmusic.com/general-principles-of-harmony-harmony-texture-and-orchestration/). His
warning from the same book's "What is Poor Orchestration?" list names the failure mode directly —
heaviness as a norm instead of as a special effect, caused by too much doubling or overloading the low
register — and in "Musical Lines vs. Instrumental Parts" he adds that frequent literal doubling leads
to heaviness and greyness of colour, with octave doubling creating greater transparency than unison.
Our voice_chord accepts double_policy="root_then_fifth" and caps third-doubling at 1. That is the
prohibition without the doctrine.
double_policy a real parameter with the sourced options — root_then_fifth for solidity, octave_frame for the strengthening Rimsky describes, none for
transparency — and let the card select. Record the choice in the plan so a critic can ask why.
MOTION_CENSUS_CEILING. Belkin's greyness is a measurable quantity: the fraction of sounding time
during which two or more parts of the same timbre class play identical pitches.
*Artistic Orchestration*, "Orchestral Accompaniment", gives four prescriptions that transfer directly
to a game cue, where the "soloist" is the hook layer:
than the accompaniment.
basses, and limit held notes to dull or weak registers.
ensemble reads as an equal rather than a mask.
Bizet — short string chords alternating low and high, under two counterpoints to the voice — and his
description of the result is the target: rich but extremely transparent.
The fourth is the one our pipeline most needs, because it is the direct answer to the temptation the
ECON-03 pad ceiling creates. harmony.PAD_SHARE_CEILING = 0.20 forbids the wall of pads; Belkin says
what to do instead, and it is not "fewer layers" but "more planes, each thinner".
---
The craft concept is stated identically across sources: the low interval limit is the lowest point of
an interval, from minor second to major tenth, below which it begins to sound muddy or indistinct, and
the limits are not absolutes but regions below which the result carries real risk in a normal harmonic
context (https://www.daviddarling.info/encyclopedia_of_music/L/low_interval_limit.html,
https://www.sweetwater.com/insync/low-interval-limit/). Hoffmann's caveats are the operative part:
soft low voicings on strings are more forgiving than loud ones on brass; when the lowest note of a
voicing is not the root you must assume the root is present when checking the limit; and the chart may
be deliberately ignored for effect (https://www.robin-hoffmann.com/dfsb/low-interval-limits/).
Huron's minimum-masking principle is the reason the tables have the shape they do: equivalent spectral
energy per critical band means simultaneous notes must be more widely spaced as register descends.
The craft tables and the perceptual model are the same law at different resolutions.
WHAT WE USE, AND WHY IT IS DEFENSIBLE. harmony.erb_floor_table computes the floor directly from
Glasberg and Moore's ERB formula and harmony.ERB_PUBLISHED keeps the published comparison values
next to it: minor second never, major second A6, minor third D#4, major third E3, perfect fourth A2,
tritone E2, perfect fifth C2, minor sixth G#1, major sixth F1, minor seventh D1, octave A#0. That is a
derived table with its arithmetic written out and a self-test comparing it against the source rather
than against its own output, which is a stronger artefact than a scanned chart. The docstring already
carries the two caveats that matter — that a fundamentals-only model is MORE conservative than the
craft charts for narrow intervals because real timbres supply their own separation from upper
partials, and that the minor-second "never" is a physical result rather than a bug.
The honest gap, stated rather than papered over: this document could not retrieve a numeric craft
table from any source, because every one of them publishes it as an engraved image. We therefore
cannot check our ERB floor against the craft consensus numerically, and this document asserts NO craft
table. What can be said is that the two agree in DIRECTION everywhere and that ours is stricter for
the narrow intervals by its own construction, which is the safe direction for an automated filter to
err in. Hoffmann's root-assumption caveat, however, is a real rule we do not implement and it is
recorded as a gap in §12.
---
Belkin: faster harmonic changes raise the temperature and slower ones seem calmer; a NORM must be
established because arbitrary change loses its novelty when listeners cannot form expectations; and
consistency of harmonic rhythm unifies a section while a CHANGE of harmonic rhythm defines the
difference between sections
(https://alanbelkinmusic.com/general-principles-of-harmony-movement-interest-and-variety/).
Our build_plan takes harmonic_rhythm_bars as a single scalar for the whole cue, and
pass7_flores supplies it per cue class from a config dict. So we have the norm and we have no
mechanism for the change that defines sections — which is a structural loss, because the cue already
HAS sections and already varies its harmony grid per section through harmony_variants.
harmonic_rhythm_bars accept a per-section schedule as well as a scalar. build_plan already builds its change grid by walking a step; walking a per-section step is
the same loop with a lookup. This is the cheapest available source of sectional contrast in the
whole harmonic layer.
changes every two bars from beginning to end has one section as far as the harmony is concerned,
whatever the section list says.
harmony.ACCOMPANIMENT_FIGURES carries nine figures: block, arpeggio_up, arpeggio_down,
arpeggio_updown, alberti, broken_octave, pad, ostinato_over_changes, pedal. Measured
against the practice literature this is a good roster — it covers the sustained, the broken, the
figured and the static classes, and ostinato_over_changes covers the specific device
SNES_JRPG_SCHOOL.md HARM-06 requires. Two observations rather than additions:
harmonic rhythm, the register, or the plane. Belkin's law that held notes belong in dull or weak
registers and that aeration comes from rests and staccato basses is a SELECTION rule — it says which
figure at which register — and we have no place to put it.
harmony.accompaniment octave-fits every voicing pitch into its window with _fit_register, which pass7_flores already flags in a comment as undoing the ERB
filtering that voice_chord performed. That is a known, documented hazard in the code; the practice
reading of it is that an arpeggio and a block chord want DIFFERENT windows, because an arpeggio's
successive tones do not mask each other and a block chord's simultaneous ones do. The single window
per figure is the root of the flagged hazard.
figure_policy table mapping figure to a register-window adjustment and a permitted plane, and have accompaniment take its window from the table rather
than from one caller-supplied pair. A sustained pad gets the narrower, higher window Belkin's
dull-register rule implies; an arpeggio may run wider and lower because its tones are successive.
One consequence of §4 that belongs here rather than in the chord section. An in-set chord stated as a
BLOCK presents all its members simultaneously against the melody; the same chord stated as an
ARPEGGIO presents them successively, and a successive presentation of a tone a semitone from the
melody's current note is a passing dissonance rather than a vertical one. This is exactly the
melodic-versus-harmonic distinction the avoid-note literature insists on
(https://en.wikipedia.org/wiki/Avoid_note). It means the §4 constraint is correctly scoped to the
chord SCHEDULE and not to the figure — but it also means a strictly-in-set arpeggio is spending its
licence and getting nothing, and that an out-of-set tone, when one is placed at a cadence under H19,
should preferentially be given to an arpeggiating or ornamental layer rather than to a sustaining one.
realisation: its foreign tones may be voiced only in a layer whose figure is non-sustaining, and
never in a pad or pedal. A placed clash that rings for two bars is not the placed clash the
sources license.
---
Each rule states its source, then the operation, then the file. HA-01 through HA-08 are the vertical
grammar; HA-09 through HA-16 are arrangement and realisation.
HA-01 — THE MODE IS THE CHORD VOCABULARY, NOT A FILTER ON IT. Every ordinary chord slot draws from
the chords that fit wholly inside the ensemble's declared pitch set. Source: Belkin, coherence chapter
— scale-or-mode-based pitch limitation is the first unifying mechanism, and harmonic families cohere by
what they keep common. STATUS: IMPLEMENTED as of 2026-08-08 16:41 — harmony.in_set_chords,
harmony.build_plan(pitch_set=...), wired at pass7_flores.t1_harmonic_plan, refused by H19.
CODE-ABLE, done.
HA-02 — AN OUT-OF-SET TONE IS AN EVENT WITH A POSITION. Out-of-set chords stay reachable and become
declared and placed at a cadence or arrival. Source: COUNTERPOINT_AND_VOICE_LEADING.md "placed, not
sprinkled"; ORCHESTRATION_TEXTURE_AND_DENSITY.md on Bolero's single harmonic event. STATUS:
IMPLEMENTED — harmony.check H19. CODE-ABLE, done.
HA-03 — SEVERITY FOLLOWS SEMITONE ADJACENCY. A foreign pitch class adjacent to two scale members is
a harder event than one adjacent to one; the hardest require an arrival bar rather than any cadence,
and every H19 finding names the scale tone it collides with. Source: Nettles and Graf's avoid-note
criterion; the counting argument of §4.2. FILE: harmony.py, new semitone_neighbours() plus H19's
finding text and licence test. CODE-ABLE.
HA-04 — THE TERTIAN SHARE HAS A FLOOR. A mode-constrained plan that resolves into stacked fifths and
sus chords is in-scale and inert. Source: Persichetti p. 94 on the rootlessness of equidistant chords;
Belkin on equidistant intervals producing a static effect. MEASURED TODAY: 0.292 tertian share on the
in-set exploration plan, 17 of 24 chords with no third. FILE: harmony.HarmonicPlan.report plus a new
harmony.check rule; band calibrated on the exemplar corpus, never asserted. CODE-ABLE.
HA-05 — AN ARRIVAL TAKES A THIRD. A modal half cadence on a quintal chord is idiomatic; a full close
on one is a close that did not happen. Source: Schoenberg's cadence criterion; Persichetti on who
carries the root. FILE: harmony.build_plan._role. CODE-ABLE.
HA-06 — A CADENCE IS MEASURED BY SCALE COMPLETION. Report the fraction of the mode's pitch classes
covered by the last N chords at each cadence, so modal_close is earned rather than assigned. Source:
Schoenberg via the Strasheela formalization. FILE: harmony.build_plan report. CODE-ABLE.
HA-07 — A DESCENDING PROGRESSION IS LICENSED BY WHAT FOLLOWS IT. In C1, C2, C3 the pair C1-C2 may be
descending only if C1-C3 is ascending. Source: Schoenberg, same. FILE: a new harmony.check rule over
HarmonicPlan.chords. CODE-ABLE.
HA-08 — WONDER CAN COME FROM MOTION INSTEAD OF EXTENSION. Give the wonder dial a triadic
chromatic-mediant mechanism beside _POOL_AMBIENT, because the film idiom's wonder is consonant triads
moving, not extended chords sitting. Source: Lehman, *Hollywood Harmony*, pantriadic chromaticism.
FILE: harmony.build_plan pools. CODE-ABLE.
HA-09 — WIDE LOW, CLOSE HIGH, NO VOID. Rank candidate voicings by gap monotonicity from bottom to
top; hard-refuse a stack whose widest gap sits above the bass unless a hollow texture is declared.
Source: Rimsky-Korsakov Ch. III, "Distribution of notes in chords" and the Remarks at pp. 78-79; Belkin
"Register"; Huron's minimum-masking principle. MEASURED TODAY: 14 of 24 voicings inverted, 10 of 24
with the widest gap at the top. FILE: harmony.voice_chord ranking and filter. CODE-ABLE.
HA-10 — EVERY SOURCE PUTS A CEILING ON BASS-TO-TENOR AND WE HAVE NONE. Rimsky says the bass should
rarely lie more than an octave from the part above it; the RWU statement of the chorale convention
caps it at a twelfth; MyMusicTheory sets a floor of a fifth and treats more than an octave as
correctly spaced. Our _upper_spacing_ok bounds it not at all, which matches no source. Our renderer
is orchestral, so implement Rimsky's octave as a ranking preference rather than a filter, and write
the spread into the code comment. Source: Rimsky-Korsakov Ch. III p. 67; the two SATB pedagogical
statements in §2.1. FILE: harmony._upper_spacing_ok docstring and voice_chord ranking. CODE-ABLE.
HA-11 — DOUBLING IS A DECLARED INTENT. Make double_policy real with sourced options — solidity,
octave frame, transparency — and record the choice in the plan. Source: Rimsky on octave parts
strengthening one another and on the extreme parts being thinnest; Belkin on intentional expressive
doubling and on literal doubling producing greyness. FILE: harmony.voice_chord. CODE-ABLE.
HA-12 — EVERY LAYER DECLARES A PLANE. foreground, movement, resonance or frame, orthogonal
to pattern.kind; exactly one foreground plane at any instant. Source: Belkin, "Planes of Tone".
FILE: the plan layer schema plus a harmony.check predicate. CODE-ABLE.
HA-13 — RICHNESS COMES FROM MORE PLANES, NOT THICKER ONES. The answer to a thin accompaniment under
the ECON-03 pad ceiling is several thin planes, aerated with rests, with held notes confined to weak
registers. Source: Belkin, "Orchestral Accompaniment". FILE: pass7_flores layer construction; measured
against harmony.PAD_SHARE_CEILING. CODE-ABLE.
HA-14 — HARMONIC RHYTHM IS PER SECTION. Accept a schedule as well as a scalar, because change of
harmonic rhythm is what defines a section boundary. Source: Belkin, movement chapter. FILE:
harmony.build_plan(harmonic_rhythm_bars=...) and pass7_flores config. CODE-ABLE.
HA-15 — THE FIGURE CHOOSES THE WINDOW. A sustained figure and an arpeggio want different registers,
because simultaneous tones mask and successive ones do not; the single caller-supplied window is the
root of the _fit_register hazard pass7_flores already flags. Source: Huron's minimum masking;
Belkin on held notes in weak registers. FILE: harmony.accompaniment. CODE-ABLE.
HA-16 — A PLACED CLASH IS NOT A SUSTAINED ONE. When H19 licenses an out-of-set chord, its foreign
tones may be voiced only in non-sustaining layers, never in pad or pedal. Source: the avoid-note
literature's melodic-versus-harmonic distinction. FILE: pass7_flores realisation plus an H19
companion check. CODE-ABLE.
HA-17 — CHECK LOW INTERVALS AS IF THE ROOT WERE PRESENT. When a voicing's lowest note is not the
root, the limit is checked against the implied root, not the sounding bass. Source: Hoffmann's
low-interval-limit caveats. FILE: harmony.spacing_ok / voice_chord filter. CODE-ABLE.
HA-18 — DRONE COVERAGE IS REPORTED AGAINST THE PAD CEILING. So a cue cannot dodge ECON-03 by
relabelling pads as drones, and so the fraction of the cue protected from clash by construction is
visible. Source: Belkin on persistent common tones as the simplest coherence, and on greyness as the
failure. FILE: plan report plus harmony.check H13's neighbourhood. MEASURE-ONLY.
---
Ranked by value to the round-5 build, with the declines stated.
ADOPT, FIRST TIER — these change what the composer writes.
1. HA-04, the tertian floor. This is the single most valuable rule in the document because it is
the one nobody would have found by listening for the clash. The mode constraint that fixed the
clash produced a 0.292 tertian share, and two independent authorities — Persichetti on rootlessness,
Belkin on equidistant staticness — predict that output will read as washy. Adopting the clash fix
without this counterweight trades one audible defect for another.
2. HA-09, the disposition law. Three authorities agree, it is derivable from critical-band
perception, our output violates it in 58% of voicings, and it is implementable as a ranking term
that cannot break anything currently legal.
3. HA-03, severity by semitone adjacency. Turns H19 from a boolean into a graded rule and makes its
findings name the actual collision. Cheap, and it makes every future refusal legible to an author.
4. HA-12, planes. The resonance role is missing from our schema and it is the role our drones and
pads are actually playing. Without it, "how many layers" and "what are they for" remain
unanswerable in the same breath.
ADOPT, SECOND TIER — these change how the plan is realised.
5. HA-15 and HA-16 together, because they are the same insight applied to two ends: what a figure
does to register, and what a figure does to a licensed dissonance. HA-15 also resolves a hazard
pass7_flores has already flagged in its own comments.
6. HA-14, per-section harmonic rhythm. The cheapest sectional contrast available, and our
harmony_variants mechanism already proves the plumbing exists.
7. HA-05 and HA-06, the arrival and cadence pair. Small, and they make the modal_close label mean
something measurable.
8. HA-11 and HA-17, doubling policy and the implied-root check. Both are single-function changes
with clean sources.
ADOPT WITH A CALIBRATION GATE FIRST.
9. HA-18, drone coverage. Adopt the measurement immediately; adopt no threshold until the exemplar
corpus has been measured, per the standing rule that a target derived from our own output is not a
bar.
ADOPT AS DOCUMENTATION RATHER THAN CODE.
10. HA-10, the bass-to-tenor spread. The ranking term is worth having, but the more valuable half
is the comment recording where the sources actually sit — Rimsky at an octave, RWU at a twelfth,
our code at no limit at all. A future reader of _upper_spacing_ok should not have to rediscover
that its unbounded treatment is our own choice rather than a convention any source states.
DECLINE FOR NOW, WITH REASONS.
pentatonic mode with fourteen available chords and no leading tone, the ascending/descending
taxonomy classifies almost everything the same way, so the rule would fire rarely and prove little.
Revisit when a diatonic or heptatonic region cell is built.
pitch set the chromatic mediants are all out-of-set by construction, so this rule mostly waits on a
mode with more room. Record it; build it for the heptatonic cells.
in_set_chords plus snap_structural_tones, planing through H01's declared_mud_pairs licence.
New code would duplicate working mechanisms.
image and we will not assert numbers we did not read. The ERB derivation stands, and HA-17 adds the
one craft caveat we could verify.
---
For the audit phase. Each entry states the deviation, the evidence, the practice it deviates from, and
a severity. Every measurement was re-run against the working tree AFTER the concurrent lane's
2026-08-08 16:41 and 16:49 edits landed, so nothing here is stale against a repair that already
happened. Where a gap CLOSED during this lane's reading, it is recorded as closed rather than deleted,
because the audit needs to know it was checked.
GAP-01 — CLOSED DURING THIS READING. build_plan was called without pitch_set.
DEVIATION: pass7_flores.t1_harmonic_plan called harmony.build_plan without the pitch_set
argument, so _POOL_AMBIENT and _POOL_COLOUR were reachable in a pentatonic cue.
EVIDENCE: reproduced — the unconstrained call returns foreign pitch classes {0, 1, 3, 5, 7, 10} against
D pentatonic, six of them, matching the reported symptom exactly; offenders include IVmaj7#11
contributing {C#, G} and imin9 contributing {C, F}.
PRACTICE: Belkin, coherence chapter — mode-based pitch limitation is the primary unifying mechanism.
STATUS: CLOSED at pass7_flores.py:780 (file mtime 16:41). Re-measured with pitch_set armed: zero
foreign pitch classes, cadence inventory intact, non-functional ratio 0.3478 against a 0.35 target.
SEVERITY: was critical; now informational. Keep the entry so the audit can confirm the repair rather
than rediscover the defect.
GAP-02 — CLOSED DURING THIS READING. H19 was documented but not implemented.
DEVIATION: build_plan's docstring stated that check H19 refuses an undeclared out-of-set chord
while RULE_CODES ended at H18 and no H19 was emitted anywhere in check.
EVIDENCE: first read counted 18 codes and zero occurrences of the literal "H19" outside the docstring.
STATUS: CLOSED — RULE_CODES now carries 21 entries, H19 (mode), H20 (toneness band) and H21 (stream
gaps), with H19 emitted at two sites in check (harmony.py mtime 16:49).
SEVERITY: was high — a documented-but-absent rule is worse than a missing one, because it reads as
covered. Now informational.
GAP-03 — OPEN. No voicing rule implements the wide-low, close-high disposition.
DEVIATION: harmony.voice_chord filters on the ERB floor (VL-8), adjacent upper-voice spacing (VL-7)
and third-doubling (VL-12), and ranks by common-tone retention plus minimal motion. Nothing scores the
SHAPE of the stack.
EVIDENCE: measured over the 24 in-set voicings at GRID_VOICES=4, GRID_REGISTER=(31, 64) — 14 of 24
have a bottom gap narrower than their top gap; 10 of 24 have their widest gap at the top. Example:
Iquintal → [38, 45, 52, 62], gaps 7, 7, 10.
PRACTICE: Rimsky-Korsakov Ch. III p. 67 and pp. 78-79 (wide low, close high; no void in the
intermediate parts; worst in forte); Belkin "Register" (normal disposition follows the overtone
series, no major gaps in the middle); Huron's minimum-masking principle as the perceptual derivation.
SEVERITY: HIGH. This is an audible, measured, three-source deviation and the fix is a ranking term.
GAP-04 — OPEN. Nothing constrains or reports the tertian share.
DEVIATION: the mode constraint's own output is dominated by thirdless sonorities and no rule notices.
EVIDENCE: quality census of the in-set 32-bar exploration plan — quintal 9, sus4 5, sus2 3, maj 4,
min 2, add9 1. Tertian share 0.292; 17 of 24 chords contain no third.
PRACTICE: Persichetti p. 94 (equidistant chords are rootless; identity falls to the melodic voice);
Belkin, movement chapter (equidistant intervals produce a static effect, unequal ones create momentum).
SEVERITY: HIGH, and rising — this is the defect the §1 repair CREATES, so it will be shipped by the
same round that fixes the clash unless it is caught here.
GAP-05 — OPEN. No instrument measures accompaniment-versus-mode conformance.
DEVIATION: H19 is a composer-side rule inside harmony.check, evaluated on a plan. No scoring lens in
harness/music_gen/instr_*.py measures whether a REALISED cue's accompaniment stays inside the
ensemble's scale.
EVIDENCE: grep for mode_pcs, outside_set and in_set_chords across harness/music_gen/*.py
returns three files — harmony.py, pass2_flores.py, pass7_flores.py — and no instr_*.py.
Positive control: the same pattern returns 27 matches in harmony.py, so the search can match.
instr_harmony_fit.py's own LAW is about the MELODY's structural tones being chord members; it says
nothing about the chord's tones being mode members.
PRACTICE: the general discipline that a rule enforced only at authoring time is not enforced against
anything that bypasses the author. The round-4 defect reached rendered audio precisely because the
lens that would have caught it did not exist.
SEVERITY: HIGH. Without it, any future path into the plan that skips build_plan — a hand-authored
grid, a legacy plan, an ACE-Step bed — reintroduces the defect silently.
GAP-06 — OPEN. The harmony grid's bass sits below the module's own toneness floor.
DEVIATION: pass7_flores.GRID_REGISTER = (31, 64) puts the grid's lowest permitted pitch at MIDI 31,
which is G1, while harmony.TONENESS_LOW = 41 (F2) is the floor below which H20 classifies material as
colour rather than voice.
EVIDENCE: measured lowest pitch actually used across the 24 voicings is MIDI 35, B1 — six semitones
below the toneness floor, ten semitones below in the permitted range.
PRACTICE: Huron's toneness principle as our own H20 states it; Belkin's warning that overloading the
low register produces heaviness as a norm.
SEVERITY: MEDIUM. Not necessarily wrong — a frame layer below the toneness band is a legitimate
resonance role — but it is UNDECLARED, and the same module holds both numbers without reconciling
them. This is exactly the case HA-12's frame plane exists to make explicit.
GAP-07 — OPEN. double_policy is accepted and not implemented.
DEVIATION: harmony.voice_chord takes double_policy: str = "root_then_fifth" in its signature. The
only doubling behaviour actually enforced is the third-doubling ceiling.
PRACTICE: Rimsky Ch. III on octave doubling strengthening the chord and on the extreme parts being
thinnest; Belkin on doubling as intentional expression, bass doublings adding solidity, and literal
doubling producing greyness.
SEVERITY: MEDIUM. A parameter that is accepted and ignored is a latent bug — a future caller will set
it and believe it took effect.
GAP-08 — OPEN. Harmonic rhythm is a single scalar for a sectioned cue.
DEVIATION: build_plan(harmonic_rhythm_bars=...) is one number for the whole plan, supplied per cue
class by pass7_flores, while the cue has real sections and already varies its harmony grid per
section through harmony_variants.
PRACTICE: Belkin, movement chapter — change of harmonic rhythm is what defines the difference between
sections; consistency within one is what unifies it.
SEVERITY: MEDIUM. A structural expressive dimension we are not using at all.
GAP-09 — OPEN. One register window serves every accompaniment figure.
DEVIATION: harmony.accompaniment octave-fits every voicing pitch into a single caller-supplied
window via _fit_register, regardless of figure. pass7_flores already flags in its own comments that
this undoes the ERB filtering voice_chord performed.
PRACTICE: Huron's minimum masking — simultaneous tones mask, successive ones do not, so a block chord
and an arpeggio have different low limits; Belkin on confining held notes to dull or weak registers.
SEVERITY: MEDIUM, and it is the documented root of a hazard the code has already noticed.
GAP-10 — OPEN. Low-interval checking does not assume the root.
DEVIATION: harmony.spacing_ok evaluates the sounding pitches. When a voicing's lowest note is not the
root — which the bass_pc parameter explicitly permits — the practice is to check the limit as though
the root were present.
PRACTICE: Hoffmann, low-interval-limit caveats, stated as a rule rather than an aside.
SEVERITY: LOW-MEDIUM. Narrow in effect, trivially implementable, and one of only two craft-table facts
this lane could verify in text form.
GAP-11 — OPEN. Nothing distinguishes tonic, dominant and double pedal.
DEVIATION: pass7_flores._pedal_span returns a span whose pitch class is the tonic by construction;
harmony.accompaniment("pedal", ...) re-articulates once per bar across the whole plan. The dominant
pedal — the standard pre-cadential tension device — is unreachable, and so is the tonic-plus-fifth
double drone that is the modal idiom's signature sound.
PRACTICE: Belkin on persistent common tones as the simplest coherence and their identity with the
classical pedal point; the general treatment of pedal points as a two-kind device across the harmony
literature. CRAFT CONSENSUS for the tonic/dominant distinction itself, which no single source in §2
states as a numbered rule.
SEVERITY: MEDIUM. The most reliable anti-clash device in the modal toolkit is present in one of its
three forms.
GAP-12 — OPEN, AND IT IS A DOCUMENTATION GAP IN A SIBLING.
DEVIATION: ORCHESTRATION_TEXTURE_AND_DENSITY.md §2.1 records that automated retrieval would not
return the body of Rimsky-Korsakov's Chapter III and correctly makes no claim from it. That limit is
now obsolete — the chapter body was retrieved for this document by downloading the Gutenberg HTML and
extracting locally rather than by remote summarisation, and §7.2 and §7.3 above quote it.
PRACTICE: our own verification discipline — a stated honest limit that has been overcome should be
updated in place, not left to make a future reader believe the source is unavailable.
SEVERITY: LOW, but it is a one-line fix and the method it records (fetch the raw file, extract locally)
generalises to every other treatise this series has failed to retrieve through a summarising fetch.
GAP-13 — OPEN. Functional labels are reported for pentatonic cues without a caveat.
DEVIATION: harmony.check H16 grades the non-functional chord-change ratio and H17 grades the cadence
schedule, both against SNES_JRPG_SCHOOL.md bands derived from functional-tonal practice. In an
anhemitonic pentatonic there is no leading tone and no tritone, so those labels are a scheduling
device rather than a claim about harmonic pull, as in_set_chords's own docstring argues.
PRACTICE: the modal-harmony literature's basic position that functional analysis does not transfer;
SNES_JRPG_SCHOOL.md HARM-02's own concession that a dominant substitute works by voice-leading
rather than leading-tone pull.
SEVERITY: LOW. Nothing is wrong; something is unqualified. The reports should carry the caveat so a
critic does not read a strong H16 number as evidence of harmonic function that the mode cannot supply.
---
Four, stated plainly.
The numeric low-interval-limit table was not obtained from any source and is therefore not in this
document. Four sources were tried; all publish it as an engraved image. §8 says what we use instead.
Two named authorities — Piston's *Harmony* and Ron Miller's *Modal Jazz Composition and Harmony* —
could not be read in full. Piston's spacing rule is cited to the pedagogical consensus that states it
identically, with Piston named as its canonical home rather than quoted. NO rule in this document is
attributed to Miller; where a modal-vocabulary rule appears it is sourced to Persichetti, Belkin or the
Berklee chord-scale literature. If Miller is acquired later, §5 is the section it would deepen.
The stack moved while this document was being written. Two of the thirteen gap notes closed between
the first and second readings, and every measurement reported here was re-run afterward against the
working tree. Any measurement in this document should be re-derived at HEAD before it is cited as
current, per the standing rule that a proof is only true at the commit it was run on.
Four citations did not survive an independent audit, and the corrections are marked in place at each
site rather than silently applied. An adversarial citation-reality pass on 2026-08-08 re-fetched the
sources behind this document's load-bearing claims. Most held exactly: Rimsky-Korsakov's Chapter III
was re-extracted from the Gutenberg HTML and every sentence §7.2 and §7.3 attribute to it is there
near-verbatim, including the register table at pp. 78-79 and the temporary-doubling passage; Belkin's
*Artistic Orchestration* was re-extracted from the PDF and "Planes of Tone", "Register", "Hollow
Textures", "Musical Lines vs. Instrumental Parts" and "Orchestral Accompaniment" all say what is
claimed, down to the Bizet example and "rich but extremely transparent"; the Strasheela formalization
carries all six Schoenberg constraints as stated; Persichetti's p. 94 sentence, the avoid-note
definition, Belkin's three harmony chapters, Hoffmann's caveats, the Darling definition, and the GDC
session title and abstract all verified. What failed: the Berklee glossary has no avoid-note entry
(§2.1, §4.1); the Ron Miller archive item is darkened and serves no copy (§2.1); the "bass-to-tenor
free" reading was contradicted by the very source cited for it, which caps the distance at a twelfth
(§2.1, §3.2, §7.2, HA-10, §11); and the Lehman phrase quoted in §3.4 could not be re-verified because
both Oxford hosts refuse automated fetches, so it is now a paraphrase. The failure mode in three of
the four was the same one this series exists to prevent — a real source named as confirming something
it does not actually say — and the audit trail is left visible so the next reader can re-run it rather
than re-trust it.