This commit is contained in:
khodowany
2026-10-04 17:14:13 -05:00
parent f234dd6d51
commit 68df7292ee
33 changed files with 990 additions and 1872 deletions
+20 -48
View File
@@ -1,59 +1,31 @@
# Active production path audit
# Current active path
Baseline: revision `405066e` (`Revamp`), initially clean working tree. The immutable copy is `build/composer_repair/405066e/baseline/`; `baseline_inputs.json` records source/data and optional-reference hashes. These are evidence, not production inputs. The named ZIP archives and external remediation/comparison Markdown files were absent. The extracted source copies in `data/songs/` remain authoritative and unchanged.
Starting revision: `f234dd6`. Compact baseline: `build/solo_reference_comparison/previous/`; source/reference hashes: `preserved_inputs.json`.
Optional reference paths actually present:
Current authorization permits studying the four supplied solos to identify reusable musical relationships. It does not permit production reads, stored reference phrases, target-loss selection or song-specific recipes. References remain unchanged.
- `build/all-of-me-solo-1.xml` — acoustic
- `build/all-of-me-solo-2.xml` — electric
- `build/autumn-leaves-solo-1.xml` — acoustic
- `build/autumn-leaves-solo-2.xml` — electric
## Verified findings
No reference contents were inspected to author the production changes. Optional comparison commands run after generation, preserve raw XML, and explicitly apply the separately confirmed guitar-written octave convention. Source import keeps its own contract.
| Reported issue | Reproduction / earliest failing stage | Repair |
| Finding | Stage | Repair |
|---|---|---|
| Broad score overwritten | Confirmed: `checked_phrase` score replaced in `themes.phrase_candidates`; selection | One `MusicalEvaluation` supplies the actual score; no subsequent replacement or extra chorus transition cost |
| Density calculated but unused | Confirmed in removed `phrasing.evaluate`; selection | Active-span attack-range contribution in authoritative evaluator; sustains and planned space have separate intents |
| Absolute onset “rhythm diversity” | Confirmed in `themes.seeds`; retrieval | Duration/rest descriptors invariant under time translation |
| Chord tone at every internal endpoint | Confirmed in `unit_candidates`; construction and validity | Ordinary endpoints use mapped pitches; sustained notes and declared destinations retain their contracts |
| Every window sustained/closed | Confirmed; representation/construction | Open alternative; local settles are intermediate; cadential completions and source handoffs are terminal |
| Answer vocabulary unreachable | Confirmed: operation chooser omitted answer; construction | Data-defined chooser requests answer, extension, fragment, free continuation, development and return |
| Residual third/sixth-beat offsets | Reproduced from half-beat edits of triplet material; construction | Complete group checks; binary-only boundary alteration; complete displaced triplets preserved |
| Expressions after strict winner | Confirmed in `composer.compose`; construction | Typed alternatives and direct versions compete before phrase selection |
| Narrow starting/route choices | Confirmed: three first pitches, prefix of two paths, suffix of three; pruning | Whole-route actions, register representatives, named cutoff counts; no independently selected suffix |
| Source register / electric +12 | Confirmed in role data and `profiles.for_part`; construction | Soft overlapping role centers and phrase alternatives, all six strings |
| Role dependency / reference lookup | Not reproduced in baseline normal path | Existing independent process workers retained; runtime read boundary added |
| Overly full responsive accompaniment | Not reproduced in current production | Current source-only canonical sparse comping retained; no generated-solo response reintroduced |
| Shape-changing expressions used an already realized provisional route | Construction | Plan timing, destination, hold/release and contracts before route realization |
| An approach could not resolve into an anticipated target | Validity/construction | Exact shared target and harmonic boundary; require both contracts |
| New on-time arrivals could lose their pitch during route filling | Construction | Fix selected arrival pitches and protect their sounding tails |
| Enclosures lacked a mapped whole-tone upper neighbor | Vocabulary | Two additional target-relative orders; actual collection membership required |
| Minor sixth always demanded immediate neighbor resolution | Policy | Bounded stable tonic/predominant color |
| Uniform eighth movement inherited a long-equal-value penalty | Retrieval | Eighth movement remains available without that penalty |
| Internal provisional holds excluded flowing alternatives | Construction | Subdivide a suitable internal span; preserve committed ending tails |
| Reference labels in technical fingering containers were missed | Presentation | Preserve verbatim label and original container |
| Repeated approach/rhythm/fret checks dominated new work | Performance | Fully keyed bounded caches; caller provenance restored |
## Before and after call graph
The older score overwrite, inert density term, absolute-onset rhythm proxy, string bans and generated-part dependencies were already repaired before this revision. They are not claimed as new work.
Both enter through `generator.__main__ → arrange.generate.generate_performance_scores → production.generate_tree → generate_role`. A spawn process pool already existed (default two workers). Roles use immutable original-song analysis and independently keyed policies/caches. Assembly applies source-defined role masks.
## Production call graph
Previously the solo path was `composer.compose → leads.thematic_options → themes.phrase_candidates → unit_candidates → protected prefix + route suffix → checked_phrase → overwritten score → solo winner → expressions.refine`.
`generator → arrange.generate → production.generate_tree → generate_role → composer.compose → leads.thematic_options → themes.phrase_candidates → themes.unit_candidates → gestures.select / routes.candidates → checked_phrase / scoring.musical → independent winner → notation → assembly`.
Now it is `composer.compose → leads.thematic_options → themes.phrase_candidates → whole joint unit_candidates → complete routes → provisional two-sided join alternatives / typed expression alternatives → checked_phrase → scoring.musical → phrase frontier → independent solo winner → validation → notation → assembly`. Source masks, vocal pickup, scales and physical checks are retained.
Source-feature retrieval covers the original head. A realized home theme guides later development. Meter-specific rhythms and general grammar supply alternatives. Four selected timing templates can request joint gestures; the total route-job budget remains 16. Complete planned routes keep eight intermediate representatives. Ordinary routes retain sequence-catalog and chord-traversal support. Bounded join/timing/local-decoration revisions preserve contracts.
| Module/function | Live responsibility | Production inputs / budgets |
|---|---|---|
| `production.SourceAnalysis.read` | Canonical melody, harmony, exact meter/tempo/form | Original source only; corrected `meter` key to actual `time_signature` |
| `themes.seeds` | Source feature evidence throughout the head | Source notes, preferred feature roles; eight diverse seeds |
| `themes.rhythm_windows` / `patterns` | Complete rhythm alternatives and lawful transformations | Meter-filtered catalog, authored cells and difficulty; eight representatives |
| `themes.operation_choices` | Request development purposes | `grammar.operations`, actual home/incoming state |
| `themes.unit_candidates` | Complete joint actions | Actual incoming note, theme, destination, register; 16 jobs, eight retained gestures, deterministic retry |
| `routes.candidates` | Full octave-aware scale/chord route | Relative sequence catalog, chord traversal operators, exact sounding span; eight route representatives |
| `gesture_rhythm.join_variants` | Bounded edits across internal joins | Up to two beats on each side; eight legal alternatives; no protected hold consumed |
| `expressions.joint_candidates` | Approach/color/anticipation/suspension alternatives | Versioned rules; eight representatives per provisional phrase, with direct version retained |
| `realization.checked_phrase` | Identity, harmony, hold, placement, final evaluation | No optional reference inputs; one final evaluation result |
| `leads.thematic_options` | Bounded continuation across windows | Eight chorus alternatives; duration-weighted complete evaluations |
| `comping.Canonical` | Source-only reusable accompaniment | Written harmony/source rhythm/form, sparse voicing and comping resources |
`selection_trace.operations` reports operation eligibility, proposals, validity and pruning. `joint_gestures` separately reports structural proposals, retained jobs, valid routes and retained units. Counts do not imply a selected use.
`themes.prefix_paths`, `_prefix_paths`, and unused `instantiate` were removed. The old thematic `phrasing.evaluate` was removed. The generic cell/draft realizer and explicit `mode='paraphrase'` API remain compatibility/test/audition paths; ordinary production does not call them or silently fall back to them. Their existence is not claimed as a new production capability.
A further pruning defect appeared during the real-song build: the seed category combined treatment and form position. Its first layer could fill the entire budget with eight exact-interval references and discard rhythm/contour contracts. The corrected cutoff preserves treatment families first; a synthetic reachability regression covers this. Open windows now also request continuing rhythm, rather than using arrival rhythm simply because a computational window ends.
Profiling found repeated `diverse` ranking and interval-family classification among the major costs. Ranking is now decorated once per item and immutable path descriptors are memoized. A stable-order comparison test proves that the optimized cutoff preserves the old ordering for tied ranks; no larger beam or wall-clock-dependent choice was added.
## Baseline export correspondence
A fresh read of each preserved MusicXML export was compared with `playback.compile_timeline` of its saved role document (explicit guitar octave convention and merged sounding ties). All four matched exactly: All of Me acoustic 117 attacks, electric 121; Autumn Leaves acoustic 83, electric 110. Evidence is `baseline-export-proof.json`. This confirms the saved baseline's exported music; it is not a claim that XML formatting or those counts predict musical quality.
Canonical accompaniment remains source-only and independent. Explicit legacy paraphrase/cell APIs remain compatibility/test paths, without production fallback. Unused historical audition controllers were removed.
+16 -28
View File
@@ -1,46 +1,34 @@
# Reproduction commands
Run from the repository root. Prefix module invocations with:
Use this prefix from the repository root:
```
```sh
build/build_common/python/bin/python3 build/build_tools/python_runner.py build/build_common/modulus
```
Full staged production build actually run:
Staged generation:
```
-m generator --data-dir data --output-dir build/composer_repair/405066e/candidate --static-assets-dir package/assets --check --jobs 2 --composition-jobs 2 --composition-cache build/composer_repair/405066e/cache --engraving-cache build/build_common/engraving_cache --export-solo-xml --trace-level full --profile-output build/composer_repair/405066e/candidate-profile.json --progress
```sh
-m generator --data-dir data --output-dir build/solo_reference_comparison/.staging --static-assets-dir package/assets --check --jobs 2 --composition-jobs 2 --composition-cache build/build_common/composition_cache --engraving-cache build/build_common/engraving_cache --export-solo-xml --trace-level full --profile-output build/solo_reference_comparison/build-profile.json --progress
```
Post-generation comparison actually run, with explicit role and alignment conventions:
Publish normally with `cmake --build build/build_x86_debug --target vamp_generated_assets -j2`. Copy completed `generated_assets/solo_xml/` into `build/solo_reference_comparison/generated/` for the comparison.
```
-m audition.solo_compare --generated-dir build/composer_repair/405066e/candidate/solo_xml --reference all_of_me/acoustic=build/all-of-me-solo-1.xml --reference all_of_me/electric=build/all-of-me-solo-2.xml --reference autumn_leaves/acoustic=build/autumn-leaves-solo-1.xml --reference autumn_leaves/electric=build/autumn-leaves-solo-2.xml --form-start autumn_leaves/acoustic=2 --form-start autumn_leaves/electric=2 --form-start all_of_me/acoustic=1 --form-start all_of_me/electric=1 --reference-pitch guitar-written --assets build/composer_repair/405066e/candidate --output build/composer_repair/405066e/references
```sh
-m audition.solo_compare --generated-dir build/solo_reference_comparison/generated --reference all_of_me/acoustic=build/all-of-me-solo-1.xml --reference all_of_me/electric=build/all-of-me-solo-2.xml --reference autumn_leaves/acoustic=build/autumn-leaves-solo-1.xml --reference autumn_leaves/electric=build/autumn-leaves-solo-2.xml --form-start autumn_leaves/acoustic=2 --form-start autumn_leaves/electric=2 --form-start all_of_me/acoustic=1 --form-start all_of_me/electric=1 --reference-pitch guitar-written --assets build/build_x86_debug/generated_assets --output build/solo_reference_comparison
```
The standalone production role interface remains available (example, not part of the benchmark measurements):
Full relationship/rule review:
```
-m generator.compose --song data/songs/autumn_leaves.xml --role electric_solo --data-dir data --cache-dir build/build_common/composition_cache --output build/electric-role.json --solo-xml build/electric-role.xml
```sh
-m audition.theory_review --reference all_of_me/acoustic=build/all-of-me-solo-1.xml --reference all_of_me/electric=build/all-of-me-solo-2.xml --reference autumn_leaves/acoustic=build/autumn-leaves-solo-1.xml --reference autumn_leaves/electric=build/autumn-leaves-solo-2.xml --source all_of_me=data/songs/all-of-me.xml --source autumn_leaves=data/songs/autumn_leaves.xml --generated-dir build/solo_reference_comparison/generated --output build/solo_reference_comparison/analysis
```
Both CLI and CMake support independent process workers. The CMake setting is `VAMP_COMPOSITION_JOBS`; default 2, accepted range 1–16. More workers can increase memory/CPU contention. Worker completion order is not a musical input.
Tests:
All baseline/reference/audition paths are downstream evidence only. Deleting them is not a cache invalidation or musical configuration change. To test cold generation, use an empty **composition cache** directory, not a previous output score as an input.
Isolated single-role measurements actually run sequentially after regression and audition work completed:
```
-m audition.benchmark --source tests/evaluation_sources/after-youve-gone.xml --data-dir data --role electric_solo --cache build/composer_repair/405066e/benchmark-cache --output build/composer_repair/405066e/profile-cold --profile
-m audition.benchmark --source tests/evaluation_sources/after-youve-gone.xml --data-dir data --role electric_solo --cache build/composer_repair/405066e/benchmark-cache --output build/composer_repair/405066e/profile-warm
-m audition.benchmark --source tests/evaluation_sources/after-youve-gone.xml --data-dir data --role electric_solo --cache build/composer_repair/405066e/benchmark-unprofiled-cache --output build/composer_repair/405066e/benchmark-cold
```sh
-m unittest discover -s tests -p 'test_*.py'
-m audition.dependency_check --output build/solo_reference_comparison/dependency
```
The first run measures profiler overhead as well as generation. The third uses a separate initially empty cache to measure unprofiled cold generation. All three canonical musical hashes are checked in `isolated-role-proof.json`.
Isolated full warm-cache build actually run:
```
-m generator --data-dir data --output-dir build/composer_repair/405066e/warm --static-assets-dir package/assets --check --jobs 2 --composition-jobs 2 --composition-cache build/composer_repair/405066e/cache --engraving-cache build/build_common/engraving_cache --export-solo-xml --trace-level full --profile-output build/composer_repair/405066e/warm-profile.json --progress
```
Individual-role generation remains `-m generator.compose --song ... --role acoustic_solo --data-dir data --cache-dir ... --output ... --solo-xml ...`. No other part is generated as a musical input. The one comparison folder is downstream and disposable.
+22 -21
View File
@@ -1,25 +1,26 @@
# Production data and consumer inventory
# Data and cleanup inventory
All additions are independently authored general rules under the repository MIT license. No optional target pitches, rhythm fingerprints, statistics, fitted weights, or derivatives were added. Existing source songs and target files are untouched.
Rules were authored as transposable theory relationships under the repository license. Inspection of the four solos motivated the repair; provenance states that openly. No reference phrases, bar recipes, fingerprints, aggregate distributions or fitted weights were stored.
| Resource | Action / count | Live consumer and reason |
| Resource | Action | Live consumer |
|---|---|---|
| `data/songs/*.xml` | Keep both authoritative sources | Import/immutable analysis; no source archive overwrite |
| `data/scales` | Keep 21 patterns | Seven modes each of major, melodic minor, harmonic minor; ordinary mapped permission |
| `data/sequences` | Keep 2,954 paths (14/196/2,744) | Exact degree-route utility; not uniform lick sampling |
| `data/rhythms` | Keep 3,538 snippets (34 2/4, 146 3/4, 630 4/4, 2,728 5/4) | Meter-indexed retrieval; 5/4 does not compete in 4/4 |
| `composition/rhythms.json` | Extend nine cells with entry/exit/subdivision semantics; keep six comping figures | `vocabulary.rhythm_cells`, `themes.rhythm_windows`, `comping.Canonical` |
| `composition/melodic_vocabulary.json` | Extend eleven cells similarly; retain four chord traversal rules | Complete rhythmic groups plus transposable chord-member paths |
| `composition/grammar.json` | Add reachable operation chooser, answer/extend/fragment contracts, authoritative evaluation configuration | `themes.operation_choices`, `feature`, `scoring.musical`; preserves existing development contracts where applicable |
| `composition/harmony.json` | Keep eleven optional color policies; add bounded prepared step-down suspension policy | Typed full-duration expression validation and candidate construction |
| `composition/lead_ins.json` | Keep seven formulas and two blues rules | Whole approach/target contracts, direct alternatives always available |
| `composition/roles.json` | Replace source octave offsets and fixed register cycles with overlapping soft centers and alternative regions | Both instruments use all six strings, frets 1–12; no equal-use quotas |
| `data/expected/performance_summary.json` | Keep validation-only | Form/layout compatibility check, never winner selection |
| `audition/controls/original_lead_theme.json` | Already migrated outside production; keep optional | No production read; runtime read boundary excludes audition files |
| Saved outputs and references under `build/` | Keep comparison-only | Separate explicitly invoked audition commands |
| `data/songs/*.xml` | Keep both unchanged | Original source analysis |
| `data/scales/` | Keep 21 patterns | Mapper / ordinary permission |
| `data/sequences/` | Keep 2,954 paths | Complete relative routes |
| `data/rhythms/` | Keep 3,538 meter-specific snippets | Rhythm retrieval |
| `composition/rhythms.json` | Keep nine melodic cells/six comping figures | Themes and canonical accompaniment |
| `composition/melodic_vocabulary.json` | Keep eleven cells/four traversals; extend two traversal prefix lengths | Chord-route construction |
| Same | Add two joint gesture rules and internal subdivision policy | `gestures.proposals`, `themes.patterns` |
| `composition/lead_ins.json` | Seven formulas become nine; keep two blues rules | Construction and typed validation |
| `composition/harmony.json` | Keep eleven colors; minor sixth gains bounded stable use | Harmonic validator and construction |
| `composition/grammar.json`, `roles.json` | Keep | Evaluation, development and independent role preferences |
| `data/expected/` | Keep validation-only | Compatibility checks |
| Four supplied `build/*-solo-1/2.xml` | Keep untouched | Explicit optional review |
| `audition/theory_review.py` | Add | Full event/relationship analysis against original source |
| `audition/reference_review.py` | Extend note label evidence | Preserve raw label containers |
| `audition/controls/original_lead_theme.json` | Remove | Superseded unused audition control |
| `audition/production_review.py`, `release_evidence.py` | Remove | Historical multi-experiment exporters |
| `generator/solo/audition.py`, `lead_audition.py` | Remove | Historical unused audition entry points |
| Old generated experiment trees/logs | Remove | 1.82 GiB initially; exact paths/bytes in cleanup manifest |
The JSON version remains 1 with additive named fields; loader rejects missing provenance, duplicate IDs and unsupported subdivision groups. Event/runtime/score schemas did not change. `composer-report-2` and `joint-musical-1` identify diagnostic and evaluation schemas. Semantic generation is `joint-gestures-1`; instrumentation does not intentionally reseed music.
The old “prefix then cheap suffix” constructor and overriding thematic scorer were removed. Legacy nonproduction fixture helpers remain explicit, with no fallback from the current production route. Exhaustive path inventories and other meters are useful and were not deleted for directory size.
Evaluation-only additions: `tests/evaluation_sources/{after-youve-gone,indiana,hindustan}.xml` plus provenance JSON and README; `audition.transfer_review` is their sole consumer. These are four-measure original-song excerpts with declared piano-harmony reductions, not expected generated output or a production phrase bank. They were transcribed from cited original editions after the production vocabulary was authored. Neither ordinary builds nor required regression tests load them. The separate optional command records generation failures without relaxing policy.
Schema 1 gains required gesture fields checked by the loader. Composition version: `joint-arrivals-2`. Runtime score/notation schemas are unchanged. No accompaniment vocabulary or role policy changed. Independent positive/negative tests do not read targets. Optional transfer fixtures remain outside production data.
+7 -25
View File
@@ -1,31 +1,13 @@
# Independent-input and reproducibility evidence
# Independent inputs
The normal dependency is `original source → immutable SourceAnalysis → generate_role(role, settings, data) → assembly`. No pairwise winner selection, generated foreground prediction, responsive comping or other-role grip reuse was introduced. Acoustic/electric accompaniment remains canonical by source form position. Source-defined windows suppress a guitar's accompaniment while that same guitar solos and protect the returning vocal pickup before construction.
The preserved contract is `original source + relevant data + own role/settings + algorithm → part`. Six roles use a bounded spawn-process pool, normally two workers. No pairwise selection, generated-solo-responsive comping or other-role grip reuse exists in the active path.
`generator.input_audit.composition` installs a scoped Python audit hook. Composition reads are restricted to production data, generator code, Python runtime and that role's cache directory. Read/write handles do not bypass the rule. Reads of optional references, audition snapshots, previously published scores or another role's concrete cache are rejected. Original source content is supplied explicitly as immutable canonical analysis, before this scope. Rendering/assembly legitimately consume finished assets outside the scope.
The scoped `input_audit.composition` guard checks actual reads. References, previous output and other-role concrete caches are prohibited composition inputs. Source analysis is supplied explicitly; assembly/rendering legitimately consume finished roles afterward.
This is an internal dependency guard, not a hostile-code security sandbox. Provenance review is still needed: a runtime deletion test alone would not detect target-derived material already copied into production data. All newly authored rules were reviewed as general operations; no target score contents were consulted during production authoring.
New per-Harmony caches include exact timing/pitches/roles, continuation, profile, fixed endpoints, obligations and ending constraints. Only caller IDs/provenance are normalized for reuse, then restored. Focused tests compare uncached/cached proposals and complete routes. Pure rhythm validity and fret-position feasibility use bounded memoization.
Command actually run through the repository Python runner:
The optional dependency command tests all six roles alone, reversed, cold/warm, in two processes, with invalid targets present/deleted, and after an electric-only setting change. Actual reads and document hashes accompany equality assertions. This is a one-bar independent fixture with real catalogs, not a whole-song quality test.
```
-m audition.dependency_check --output build/composer_repair/405066e/dependency
```
Current evidence lives in `build/solo_reference_comparison/dependency/`. The implementation report lists actual completed checks. Full output traces live in `generated_assets/analysis/*.roles`.
`dependency/dependency.json` records actual read paths and canonical hashes for six roles using an independently authored one-bar C7 source and **real production catalogs**. All roles matched across standalone cold builds, reversed warm builds, reversed two-process cold builds, deliberately invalid optional target files present, targets deleted, and generation after an electric-only setting change. This is a dependency test, not a claim of whole-chorus artistic equivalence.
| Role | Stable document SHA-256 |
|---|---|
| Acoustic accompaniment | `2c3cc9efe4c6fbe7c1f8206d57e7f7d3a66bdadc9dbc2c657ea3d2d600425741` |
| Electric accompaniment | `b89eedfd82fcfe83475c13cdf461c7123a8c99137bb0452875e3d2509267e183` |
| Electric melody | `b8d18ef6fd65b204bd2fc2b69e660068890cb30aea6db827c3f3b506284ea2a1` |
| Vocal melody | `e3348117b9c63771cfa0439f276bdadf0d26dd6e560c9676c97e12a4a713737b` |
| Acoustic solo | `2d91f4f14615f6aa65c8f46ff0c8d858da1e808d8d132723c37342c20ea13e5b` |
| Electric solo | `78640b8c8776735638141f1d34cf820a737b2891cae4c4529b6907a448c272f3` |
Required tests also check irrelevant title/export-ID changes, changed original melody under unchanged harmony, unrelated song addition, role-specific settings, tuplets through assembly, and cache digest validation. Optional reference adapters remain under `audition/`; production rejects supplied reference objects. Performance measurements and observed read lists are excluded from stable asset reports, so timing variation does not make otherwise equal assets differ.
Cache identity covers source semantics/notation, relevant role data, shared musical resources, role settings, algorithm version and relevant code. Code edits can invalidate caches; instrumentation does not intentionally alter musical choice seeds. Concrete route caches retain sounding timing/endpoints/collection context, and phrase caches retain incoming history and theme. Process completion order only determines reporting order, never a musical winner.
Full-song cold/warm evidence: the isolated warm two-process rebuild of both current songs matched **all twelve complete role documents and stable reports**, plus all four exported solo XML files, against the staged build with cold solo caches. [The proof and per-role hashes](../../build/composer_repair/405066e/warm-equivalence.json) record 12.045 seconds and twelve cache hits. The separate four-bar cold/profiled/warm role runs also match one canonical document hash; see [isolated role evidence](../../build/composer_repair/405066e/isolated-role-proof.json). These checks supplement the role-order/parallel/reference-presence exercise; the full-song warm check by itself does not exercise every role-order permutation cold.
References informed general rule reasoning under the current authorization, but production never reads them. A deletion test cannot detect an embedded phrase bank; provenance and the small explicit resource diff supply that separate check.
+16 -24
View File
@@ -1,31 +1,23 @@
# Authoritative musical evaluation
# Evaluation and validity
Normal thematic production uses `scoring.musical` and its immutable `MusicalEvaluation` result (`joint-musical-1`). `Phrase.score` is exactly `evaluation.total`. A complete solo is selected by the duration-weighted sum of those complete phrase evaluations. No later post-pass changes the winning notes or adds an undisclosed transition penalty.
The active final selector remains `scoring.musical` / `MusicalEvaluation`, version `joint-musical-1`. Each phrase score is its evaluation total; the complete solo uses duration-weighted completed phrase evaluations. This revision changes construction coverage, not the final weights.
The result exposes validity, pending obligations, exact scope, raw values, denominators, weights, contributions, total and an error. Invalid harmony, identity, protected sounding tails, placement, or activity intent cannot be traded against a low cost. Identity is a contract, not two differently named resemblance rewards. Consequently the proposed redundant soft “theme” weight was not retained: fulfilled identity does not earn ever-increasing credit for copying more events.
| Component | Weight |
|---|---:|
| Rhythmic grouping/interruptions | 3 |
| Destination preparation | 2 |
| Harmonic exposure | 2 |
| Soft register preference | 1 |
| Contextual repetition | 1 |
| Activity | 1 |
| Approximate playing difficulty | 0.5 |
| Contribution | Initial weight | Meaning |
|---|---:|---|
| Rhythm | 3 | Internal isolated short events / interruptions and actual incoming connection; entrance/release are distinct |
| Destination | 2 | Preparation of declared arrivals, including the final approach; no destination obligation at an ordinary frontier |
| Harmony | 2 | Time-normalized unexplained exposure; validated typed treatments have their own hard checks |
| Register | 1 | Soft overlapping role corridor, weighted by sounding duration |
| Repetition | 1 | Bounded recent exact/relative figure and oscillation history; sustains are separate from attacks |
| Activity | 1 | Configured broad activity range over active spans, excluding held-arrival/intentional-space demands |
| Difficulty | 0.5 | Approximate time-aware fretboard travel, normalized by attacks |
Reports expose raw values, denominators, weights, contributions, total and validity. Identity, expression completion, physical domain and protected holds are hard contracts, not duplicate resemblance costs. Early retrieval estimates remain separate.
Weights reside in `data/composition/grammar.json`. These independently authored preferences are not fitted to optional targets and are not a model of aesthetic quality. Source time and chord semantics remain exact rational values. Floating-point arithmetic is confined to soft costs.
Planned arrival spans have arrival activity semantics; they need no attack on every held beat. Silence cannot exploit a missing register value. Ties merge before harmonic duration/attack evaluation; repeated attacks cannot fulfill a hold.
Retrieval uses explicitly separate estimates to keep purposeful rhythmic, register and directional alternatives before expensive route/placement work. Unit and phrase frontiers use elapsed-duration rates when their coverage differs; only complete equal-span candidates enter the authoritative comparison. This is a bounded heuristic, not an admissible global-optimality proof. Cutoff counts are recorded under `selection_trace.operations` and `expression_operations`.
Joint arrival/color/approach candidates exist before route search. An approach into future harmony requires the exact shared anticipation target. Mapped upper neighbors must actually belong to the collection. The stable minor-sixth policy is bounded by harmony/function/duration and does not legalize unrelated notes.
Tie continuations merge before durations, attack count, harmonic exposure and evaluation. Repeated attacks remain separate. Empty active passages are invalid; intentional space has no fabricated pitch/register cost. Partial expressive gestures carry a pending contract until the actual target/hold is heard; a missing past event or expired deadline fails.
Selected ordinary arrival pitches and tails are also protected through refinement; ordinary computational endpoints remain provisional. Disabling expressions removes joint expression proposals and local ornaments and may choose another valid complete phrase. It does not mean deleting exceptional notes from a winner.
`--trace-level full` preserves candidate evaluation tables and operation counts in `.roles` reports. Summary mode removes heavy candidate tables only; it does not change generation. Optional profiling reports are outside musical inputs. The report schema is `composer-report-2` and runtime score/notation schemas are unchanged.
Tests: `tests/test_composer_repair.py`, existing sustained-note/quotation/placement/expression tests, and production score-equals-evaluation assertions. Selected and competing evaluation examples are exported in the release evidence; their aggregate scores establish explainable selection, not listener preference.
Counterfactual fixtures cover every configured contribution, including nonzero rhythm interruption, destination approach and recent-pattern recurrence. Identity evidence is a hard treatment contract, not a second hidden cost. Exact sustained notes and tie-split versions return equal evaluations. Ordinary mapped nonmember notes may end an open computational unit; they do not acquire an accidental anchor requirement.
The expressive toggle now means **exclude jointly composed expression candidates**. It can select a different valid complete phrase. It does not promise the decorated winner minus ornament notes. The exported `before_enclosure` stage preserves the selected phrase's actual strict provisional realization for a local controlled comparison; undecorated phrases retain their complete notes rather than becoming silent in that view.
`Policy.weights` still belongs to the explicit legacy draft/paraphrase API and is not the active thematic evaluator's weight table. The normal score uses `data/composition/grammar.json → evaluation.weights`. The audit distinguishes those consumers; modifying a legacy-only weight is not claimed to affect the new production winner.
Reference recognition, proposed candidate, validity, retention, selected use and exact event matching are reported separately. The optional comparison has no scoring-return channel. Exact agreement is not a production loss function.
+59 -71
View File
@@ -1,106 +1,94 @@
# Deterministic composer repair — implementation report
# Reference-focused composer repair
The active production composer was refactored in place. The four complete new solos and independently generated accompaniment are published through the normal CMake target in `build/build_x86_debug/generated_assets/`. The previous release remains under `build/composer_repair/405066e/baseline/`. This is a technically validated candidate musical version, not a claim of listener approval or resemblance to the optional target compositions.
Starting revision: `f234dd6`. The goal of this revision is to make the active composer construct the musical relationships seen in the four supplied solos, using general rules and original song inputs. It does not import their notes or optimize candidate similarity to them. Exact reconstruction from general theory alone is not claimed.
## What changed
## Actual changes
The previous final-score overwrite is removed. One versioned evaluator supplies the actual selected total, with visible raw values, denominators, weights and contributions. Activity now affects selection. Relative rhythm descriptors replace the absolute-onset proxy. Explicit identity and hold contracts remain hard requirements and are not counted again as duplicate fidelity costs.
The active `themes → gestures → routes` path now chooses harmonic arrival timing, target pitch, sounding duration and release before pitch realization. It can construct an approach into an anticipated chord-tone target with both obligations present. Color destinations are available before route filling. Several compatible treatments can survive within one phrase; the local decoration stage preserves existing contracts instead of replacing them.
The normal constructor proposes complete pitch/rhythm routes from the incoming state, then checks the declared source/theme relationship. It no longer chooses a motif prefix and a separate cheap suffix. Source features are considered throughout the head; treatment diversity survives seed retrieval. This fixed a real-song failure where all eight retained seeds could demand exact intervals and exclude every rhythm/contour alternative.
On-time/delayed arrival pitches and their uninterrupted tails remain fixed through route filling and refinement. Other cell endings stay provisional. Internal long values can be reopened into eighth-note motion where the selected thematic contract permits it; exact rhythm identities and committed closing holds remain protected. Four-member chord traversals are available alongside the existing mapped paths.
Generated rhythmic edits preserve complete binary/tuplet groups. Open windows request continuation rhythm and have no compulsory chord-tone stop. Local settles remain open; cadential completion and handoff have actual held-ending contracts. The original realized theme stays available for returns, while answer, extension, fragment and free continuation are reachable operations. Bounded two-sided join revisions compete with the original phrase.
Two general enclosure formulas use an actually mapped whole-tone upper neighbor. A natural sixth on tonic/predominant minor harmony can be a bounded stable color rather than always requiring immediate neighbor resolution. These rules retain written harmony, omissions, scale restrictions on ordinary notes and physical validation. No new scale families or performance effects were added.
Approaches, enclosures, chromatic connections, colors, anticipations and prepared suspensions now compete over provisional phrases **before selection of the phrase/chorus**. Direct alternatives remain. Exact timing, target octave, preparation, resolution, complete sounding span and protected tails are checked. This is still bounded rewriting of complete provisional phrases, not exhaustive joint search over every possible expression and note.
Reference inspection now includes every one of the 514 sounding events across the four complete scores. Original labels in technical-fingering and other-notation containers are retained. The review checks recognized treatments against **original source harmony**, preserves missing initial harmony, and keeps hypotheses separate from validated rules. Remaining unexplained events are reported instead of automatically authorized.
Acoustic and electric have overlapping soft register preferences instead of source-octave anchoring and compulsory electric transposition. Both retain strings 1–6, frets 1–12, no open strings. The existing phrase-placement path, sparse canonical source-only accompaniment and independent spawn-process architecture were retained. No generated role supplies another role's musical inputs.
## One comparison location
The runtime/notation representation is unchanged. Timing, source harmony, the 21 collection patterns, vocal handoff, source melody/vocal content and physical constraints remain. All four new exported XML sounding streams match their saved role documents exactly. Vocal and electric head-melody role documents are byte-equivalent as parsed JSON to the baseline for both songs.
`build/solo_reference_comparison/` contains the compact previous four XMLs/manifest, current output, full reference comparison/audio, complete theory review and verification logs. Start with `index.html`; `analysis/theory.md` supplies the all-event analysis. Solo 1 means acoustic; Solo 2 means electric.
## Evidence and review artifacts
The references are `build/all-of-me-solo-1.xml`, `all-of-me-solo-2.xml`, `autumn-leaves-solo-1.xml`, and `autumn-leaves-solo-2.xml`. Source songs remain authoritative in `data/songs/`. All six input hashes were recorded before work. The optional adapter applies the separately confirmed guitar-written minus-one-octave convention; production import is unchanged. Autumn Leaves aligns at measure 2 / first Gm7 and retains the preceding measure. Four Autumn electric reference events conflict with the production vocal cutoff; neither input is rewritten.
- [Active call path, confirmed findings and budgets](active_path_audit.md)
- [Production data inventory and provenance](data_migration.md)
- [Authoritative evaluator and toggle semantics](evaluation_contract.md)
- [Capabilities, tests and limits](musical_capability_matrix.md)
- [Independent-input proof](dependency_proof.md)
- [Selected phrase traces and local alternative score breakdowns](../../build/composer_repair/405066e/evidence/phrase_traces.md)
- [Machine-readable operation funnels, hashes and evaluations](../../build/composer_repair/405066e/evidence/evidence.json)
- [Baseline/new/source/plain/strict/final listening page](../../build/composer_repair/405066e/auditions/index.html)
- [Separate optional target comparison](../../build/composer_repair/405066e/references/index.html)
Cleanup removed 1.82 GiB of obsolete generated comparison trees/logs and five superseded tracked audition files. Exact removed paths and sizes are recorded in `cleanup.json`. Build toolchains, reusable composition/engraving caches, source songs and the four references were preserved. The old multi-experiment documentation was replaced with current commands and contracts.
The listening page contains complete solos, excerpts, solo-only audio, fixed comparison backing, and independently assembled final backing. Rendering uses consistent neutral synthesis and levels. Signal checks covered 112 WAV files with zero full-scale samples (largest absolute 16-bit sample 16,377); this checks clipping, not perceptual balance or musical quality. The strict view restores each selected phrase's valid provisional version; it does not remove chromatic notes and leave timing holes. A phrase without decoration remains audible in that view.
## Evidence and boundaries
The local strict/decorated comparison isolates selected expression edits. Baseline versus new production changes multiple mechanisms and cannot identify which one caused a subjective improvement. Separate whole-chorus ablations restoring each superseded defect were **not** produced; broken old objectives were not retained as normal production branches. No ear-based audition was performed or claimed.
- [Active path and verified defects](active_path_audit.md)
- [Resource provenance, consumers and cleanup](data_migration.md)
- [Authoritative evaluation](evaluation_contract.md)
- [Musical capability and limits](musical_capability_matrix.md)
- [Independent input contract](dependency_proof.md)
- [Reproduction commands](commands.md)
## Selected output facts
The six-role independent-input exercise passed with real catalogs: standalone, reversed, cold/warm, two-process, optional targets present/deleted, and after an electric-only setting change. Current hashes and actual read traces are in `dependency/dependency.json`. New proposal and route cache tests compare actual uncached/cached results and caller provenance. This does not establish perceptual quality.
| Song / role | New attacks | Sounding span available | Range, sounding MIDI |
|---|---:|---:|---|
| All of Me acoustic | 120 | 128 quarter beats | 42–64 |
| All of Me electric | 106 | 128 quarter beats | 48–67 |
| Autumn Leaves acoustic | 100 | 128 quarter beats | 49–69 |
| Autumn Leaves electric | 103 | 125 quarter beats | 46–70 |
The final score weights were preserved. Construction coverage is reported separately from selection under `selection_trace.joint_gestures`. A supported relationship may never be selected; matching a reference attack is a different fact again. Complete per-phrase evaluation totals remain inspectable.
All four pass full harmonic validation with no unresolved obligations. These counts/ranges are observations, not quotas or evidence of musical preference. The three protected quarter beats at the returning Autumn Leaves vocal are explicitly excluded from the electric solo's allocation.
The first diagnostic profile exposed repeated approach/rhythm/fretboard work. Bounded caches now reuse exact immutable constraints and restore each caller's provenance. No search beam was widened and no machine-speed timeout selects music. Full build costs and final test outcomes are recorded below; concurrent checks are not treated as an isolated benchmark.
For example, All of Me electric has an open continuation over beats 20–42, a local settle on B3 at 104.5–107.5, and a final G3 handoff at 123–126 followed by space. Its selected actions include rhythm and contour development, answers, fragments, a clear return and a free continuation. All of Me acoustic selects a prepared suspension and an anticipation; these are real validated events, not unused vocabulary labels. The full trace reports proposed/valid/retained candidates and the selected actions separately.
This remains a bounded rule-based composer. Some expressive reference relationships are unsupported or not recognized by the conservative optional parser; this is not proof those notes are musically wrong. Guitar placement is a legal-path check, not full ergonomic certification. No ear-based audition or listener approval is claimed.
Autumn Leaves electric selects more free continuations and no explicitly labeled full return. That is a useful listening question about identity retention, not an invitation to enforce a return quota. Autumn Leaves acoustic repeatedly resolves to D4 in its earlier cadential passages; the report exposes this rather than interpreting pitch diversity as automatic improvement.
## Completed checks
## Reference and source handling
- Full Python suite: **576 tests passed in 1700.428s**. Command: repository Python runner plus `-m unittest discover -s tests -p 'test_*.py'`; full log in `build/solo_reference_comparison/tests.log`. This overlapped the full production build.
- Focused joint-arrival/evaluator/comparison tests: **33 passed**; eight comparison-adapter tests also passed after the presentation update.
- Six-role real-catalog dependency exercise: **passed**, including two spawned processes and reference presence/absence; evidence in `dependency/dependency.json`.
- `git diff --check`: passed at the pre-publication checkpoint.
The authoritative source files are still `data/songs/all-of-me.xml` and `data/songs/autumn_leaves.xml`. Named source/target ZIP archives and supplied review Markdown were not found; existing extracted files were used only in their authorized roles. No source was overwritten from another arrangement.
The comparison table aggregates timing-only retained-unit labels (such as diminution) into their direct construction family. The manifest preserves the original raw diagnostic labels. This reporting normalization does not select or edit music.
The four optional `build/*-solo-1.xml` / `*-solo-2.xml` references are unchanged, verified by SHA-256. Their contents were first used here by a separate post-generation comparison, not to author production rules. Solo 1 maps to acoustic; Solo 2 maps to electric. The adapter preserves raw pitches and applies the explicitly confirmed guitar-written minus-one-octave convention only to its normalized comparison. Autumn Leaves aligns at measure 2 / first Gm7 and retains its preceding measure; All of Me starts at measure 1. All four normalized reference solos have a legal placement under the current domain. This is not a complete ergonomic assessment. Four Autumn electric reference events extend beyond the production vocal-protection cutoff and are reported rather than clipped or imported.
## Published results and comparison
The additional transfer review uses independently transcribed four-measure excerpts from the original editions of After You've Gone, Indiana and Hindustan, with declared harmonic reductions and provenance outside `data/`. All six roles completed for each excerpt. These are limited transfer probes, not complete standard/form coverage or pristine external judgments of quality. No production policy was fitted to those outputs.
Normal production assets are published at `build/build_x86_debug/generated_assets/`. The four MusicXML exports in its `solo_xml/` directory are byte-identical to the copies in `build/solo_reference_comparison/generated/`.
## Performance and reproducibility
| Solo | New attacks | Sounding MIDI range | Exact matching reference attacks | Differing onset positions |
|---|---:|---|---:|---:|
| All of Me acoustic | 104 | 50–69 | 1 | 186 |
| All of Me electric | 100 | 51–67 | 3 | 187 |
| Autumn Leaves acoustic | 106 | 43–62 | 3 | 182 |
| Autumn Leaves electric | 97 | 55–70 | 2 | 170 |
Hardware: Intel Core i7-1355U, 12 logical CPUs; two composition processes and two engraving workers. Deterministic expansion budgets are used; elapsed time never selects a winner.
**None is an exact reference match.** These counts are descriptive, not evidence that the new music is closer perceptually. The earlier outputs had 0/3/0/1 exact matching attacks and 202/191/179/182 differing onset positions respectively. Different attack counts change these comparisons; they must not become a production optimization target.
The full candidate build took **1,576.3 seconds (26.3 minutes)**. Solo caches were cold, accompaniment/head caches were warm, and regression/diagnostic work overlapped; this is an observed build cost, **not an isolated cold benchmark or a clean before/after speedup claim**. Individual cold-role elapsed times were 828.6s / 645.1s for All of Me acoustic/electric and 809.8s / 722.9s for Autumn Leaves acoustic/electric. Worker times overlap and must not be added as total wall time. Engraving rendered 92 new pages, reused two complete scores and took 11.3s wall time.
The new winners contain 9/12/13/13 validated expressive contracts respectively. All of Me electric selects one anticipation; the other three winners select none. Early-arrival candidates are constructed, validate and survive pruning in the traces, so their infrequent final selection is now visible separately from lack of capability. No quota was imposed to conceal that result.
The normal cached CMake rebuild took **25.4 seconds**, with all twelve role caches and all six engraving results reused, while regression tests were running. Both source songs' published solo XML files are identical to the staged validated candidates. The profile files distinguish cache lookup from original search work. A later **isolated warm full build took 12.045 seconds** with twelve role-cache hits and two workers. All twelve role documents, their stable reports, and all four solo XML files matched the staged build exactly; `warm-equivalence.json` records their hashes.
All of Me acoustic contains a complete ascending A3–A#3–B3 connection at beats 12–13, and a mapped A3–F#3 approach to G3 at 64–65. All of Me electric sustains B3 as a valid minor ninth over its Am7 context at beats 28–31. These are selected events, not inserted examples or borrowed reference notes. `analysis/selected_phrases.md` records actual themes, full opening rhythms, every selected treatment, hold completion and alternative score breakdowns. Alternatives shown over equal spans are not falsely presented as the complete solo's globally ranked runners-up.
An isolated single-process four-bar **After You've Gone electric solo** benchmark took **19.924s cold** and **0.930s warm**, excluding interpreter startup and output-report writing. Source analysis took about 0.006s separately. Both used the real production catalogs and identical settings; the cold, warm and profiled runs produced the same canonical document hash (`5b2525a214ed7f30971752434faad2a39ca22adddcfc9947c009e1431b77187b`). These are excerpt-role measurements, not estimates for a complete chorus. No concurrent tests or audition rendering ran during these benchmarks.
The first All of Me acoustic theme still begins with a 4.5-beat source-derived rhythmic hold. This and the small number of selected anticipations demonstrate remaining distance from the supplied examples' phrase construction. The next narrow investigation is the interaction between retained source-rhythm contracts and complete-phrase selection: inspect valid arrival alternatives that lose, and source features that prevent editing a provisional opening. Do not respond by adding an enclosure quota, changing accompaniment, fitting reference counts or claiming that more vocabulary alone solved the problem.
A separate cProfile run of that same cold role took 63.770s including profiler overhead. Nested cumulative times were catalog loading 17.889s, complete composer 44.310s, route candidates 23.073s, harmonic validation 2.949s, expression alternatives 1.625s, placement 0.694s and final evaluation 0.509s. JSON writing was about 0.108s; report/provenance construction is also distributed among composer calls and is not fully isolated by that number. These nested times must not be summed. Full function evidence is in `profile-cold/{role.prof,profile.txt,stages.json}`; the measured cold/warm hash proof is `isolated-role-proof.json`.
## Final verification
A construction profile identified sequence retrieval, repeated ranking/representation and harmonic checks as costs. Ranking now computes each key once per cutoff; immutable interval descriptors are memoized. Stable-order tests verify unchanged ordering for tied ranks. A narrow 800-item/30-repeat microbenchmark returned identical selections (0.826s original versus 0.806s optimized); this is deliberately not presented as a whole-build speedup. More efficient cold search remains unfinished performance work; no beam was widened to hide candidate defects.
- All **12 role documents** agree between the cold staged build and the warm normal publication, including notes, timing and TAB. Evidence: `verification.json`.
- All eight non-solo role documents (accompaniment, electric source melody and vocal for both songs) match the previous release exactly as parsed JSON.
- All four MusicXML sounding streams match their selected production role documents. Full-duration harmonic validity, ending completion, and evaluation-contribution sums pass.
- The two original song files and four supplied references remain SHA-256 identical to their preserved inputs.
- Native command `ctest --test-dir build/build_x86_debug -R '^product_vamp$' --output-on-failure` passed in **33.54s**, with the required localhost socket access.
- The single comparison page contains 24 WAVs: complete generated/reference solos, identical-backing mixes, and opening excerpts. All passed PCM clipping checks. All 36 local page links exist. No subjective listening verdict is claimed.
The dependency exercise used real catalogs and an independently authored source. All six role hashes matched when built alone, in reverse order, in two spawned processes, warm/cold, with invalid optional target files present/absent, and after an electric-only setting change. Actual read traces and a runtime guard accompany equality tests. This does not by itself prove absence of an already embedded derivative; the independently authored data provenance is separately reviewed.
## Measured cost
## Commands and verification
Hardware: Intel Core i7-1355U, 12 logical CPUs; two composition workers. Cold solo generation plus full staged asset build took **2249.06s (37.5 minutes)**. Regression and dependency checks overlapped part of that run, so this is not an isolated speed comparison with the earlier release.
All Python commands below were run with:
| Cold solo role | Seconds |
|---|---:|
| All of Me acoustic | 1041.56 |
| All of Me electric | 850.48 |
| Autumn Leaves acoustic | 1328.58 |
| Autumn Leaves electric | 1170.46 |
```
build/build_common/python/bin/python3 build/build_tools/python_runner.py build/build_common/modulus
```
Worker times overlap. Four All of Me non-solo caches were warm; the four Autumn Leaves non-solo roles regenerated in under one second each. Engraving rendered 90 new pages, reused two scores and took 16.65s wall time. Stage/input/read evidence is in `build-profile.json` and `build-inputs.json`.
Append the relevant module/arguments:
The isolated warm CMake publication took **31.49s**, including about eight seconds of CMake/configuration overhead; asset generation reported 23s. All twelve role caches and all six engraving results were reused. Musical equality was verified, not assumed from cache-hit flags.
```
-m unittest discover -s tests -p 'test_*.py'
-m unittest tests.test_composer_repair tests.test_solo_leads.CompleteRouteTests
-m unittest tests.test_solo_themes.ThemeProduction.test_library_routes_match_the_actual_complete_theme
-m audition.dependency_check --output build/composer_repair/405066e/dependency
-m audition.transfer_review --output build/composer_repair/405066e/transfer-final
-m audition.release_evidence --assets build/composer_repair/405066e/candidate --output build/composer_repair/405066e/evidence
-m audition.production_review --assets build/composer_repair/405066e/candidate --baseline build/composer_repair/405066e/baseline --output build/composer_repair/405066e/auditions
```
An isolated 30-repeat structural-proposal microbenchmark returned exactly equal results: **0.4422s** without the proposal cache versus **0.02193s** with it (shared rhythm/position caches already warm). This is a repeated-calculation measurement, **not** a claimed whole-composer speedup. Cold search is still expensive; candidate construction/validation and repeated thematic alternatives remain performance work.
The full generator invocation and reference comparison are recorded in [reproduction commands](commands.md). Publication used `cmake --build build/build_x86_debug --target vamp_generated_assets -j2`. Native verification used `ctest --test-dir build/build_x86_debug -R '^product_vamp$' --output-on-failure`.
Earlier runs deliberately remain in the evidence directory: the first suite exposed timer leakage in supposedly stable reports and obsolete fixed-closure/phrase-count expectations. Those were repaired. A later 565-test run passed 564 tests and exposed the obsolete requirement for an unedited route in every selected fixture. The corrected provenance test passed (115.4s including class construction); the final full-suite rerun passed **all 565 tests in 737.334 seconds**, recorded in `tests-complete.log`. The focused 19-test repair/route run passed. The native suite initially failed sandbox-denied localhost socket operations; rerunning with the required local socket access passed. After publication, the native CTest target passed again in **18.91 seconds**. These infrastructure failures were not musical validation failures.
## Boundaries and next experiment
- Cold construction is still costly. The next performance step should profile purpose-conditioned route retrieval and repeated provenance work with fixed musical hashes, rather than indiscriminately widening or shrinking search.
- The frontier is bounded and can miss a viable theme/destination combination. Exhaustion is reported as budget exhaustion, not a proof of incompatibility; there is no hidden old-generator fallback.
- The final evaluator is inspectable but intentionally small. It does not establish memorability or predict listener preference.
- Current production chooses complete actions before crossing the search frontier; the partial-treatment API supports bounded pending obligations, but this is not an unbounded multi-phrase optimizer.
- Unsupported written chord stacks still produce explicit no-exact-map diagnostics. Complex importer/form conventions beyond existing support are not newly certified. Original rhythms are never silently quantized.
- Legal TAB and approximate travel costs are not a complete biomechanical model. Independent backing cannot guarantee exact gaps around a solo's realized holds; no reactive recomposition is claimed.
- Listen first to whether the introduced idea remains recognizable in Autumn Leaves electric's freer continuation. Compare the plain/strict/final versions before changing density, return counts or chromatic vocabulary. The optional target comparisons remain outside the selection process.
After verification, duplicate full asset stages, two interrupted stages, temporary tone samples and the binary diagnostic profile were removed. The comparison retains the four current scores, compact previous scores, references through links, useful audio and verification evidence in one directory. No previous output is a generation input.
+17 -23
View File
@@ -1,28 +1,22 @@
# Musical capability and limits
# Capabilities and boundaries
| Capability | Representation / live operation | Validation |
| Relationship | Active support | Limit |
|---|---|---|
| New source-influenced theme | Features throughout original head → complete joint pitch/rhythm statement | Source change test; explicit feature evidence; whole-head near-copy check |
| Recognizable return | Original realized signature retained, with harmonic adaptation | Multi-event rhythm/interval contract; no one-note perfect match |
| Answer / extension / fragment | Data-defined chooser in normal `themes.phrase_candidates` | Independent positive operation-realization tests |
| Free connected movement | Complete route conditioned on actual incoming pitch and future destination | All mapped spans, full route export correspondence; no mandatory basic endpoint |
| Rhythm groups | Binary, complete ternary and supported sixteenth groups; delayed entrances and cross-bar notes | Incomplete tuplet/residual drift rejected; imported timing never quantized |
| Open / local settle / completion / handoff | Open alternative; intermediate holds; cadential and source-boundary terminal contracts | Actual sounding hold, release and post-target motion checks |
| Two-sided join revision | Fixed outer endpoints, editable material on both sides | Full affected harmony, identifying features and protected tails revalidated |
| Approaches / enclosures / connections | Complete target-relative formulas in joint phrase alternatives | Exact octave, timing, preparation where required and complete resolution |
| Optional color | Quality/function/degree policy, distinct from written chord requirements | Full duration, exclusions/omissions, bounded exposure and specified resolution |
| Anticipation | Bounded early onset into actual future harmony | Pre-boundary contract and arriving collection/chord checked independently |
| Prepared suspension | Explicit actual preparation and delayed downward resolution | Preparation, deadline, target and mapped sounding interval |
| Blues inflection | Two conservative prepared semitone-resolution rules | Actual preparation and appropriate chord target; no blanket exemption |
| Guitar domain | Both roles all six strings, frets 1–12, no open strings | Full phrase path; ties keep exact position |
| Sparse accompaniment | Source-only canonical shells/compact voicings with rhythmic space | Written degrees/bass responsibility and repeated-form consistency |
| Theme/return | Source-derived feature and actual home realization | Technical similarity does not prove recognition |
| Mapped/chord movement | Complete sequences, chord traversal, contract-conditioned routes | Bounded search can miss alternatives |
| Anticipation | Joint arrival/hold and future-harmony contract | Bounded early window |
| On-time/delayed arrival | Selected pitch and uninterrupted tail | No compulsory arrival per cell |
| Approach into anticipation | Shared exact future target, both contracts | Wrong octave/changed target rejects |
| Enclosure | Both orders, semitone or mapped whole-tone upper | Must surround under the exact rule |
| Minor sixth | Bounded stable tonic/predominant color | Written semantics/function authoritative |
| Other colors/suspensions/blues | Existing explicit policies | Annotation is not permission |
| Rhythm | Coherent binary/tuplet groups and editable internal subdivision | No arbitrary tuplet slicing |
| Guitar | Strings 1–6, frets 1–12, no open strings | Not full ergonomic certification |
| Accompaniment | Independent canonical sparse comping | No reactive solo-gap filling |
| Reference review | All events, original labels, rule recognition | Observations distinguished from validated support |
Not every eligible operation is guaranteed to survive a bounded search or occur in either current song. Trace counts distinguish proposed, valid and retained candidates. A zero selected count is not evidence of a feature being absent from the code, and merely loading data is not evidence of reachability.
Independent tests in `tests/test_joint_arrivals.py` extend the existing timing, evaluator, importer, physical, expression and dependency coverage. The four target files are not required fixtures.
Known boundaries: sources must satisfy the existing importer/arrangement form contract; ambiguous exporter harmony is not repaired from a target. Exact unsupported chord stacks still fail scale mapping contextually. Physical validation is a limited hand-region/travel model, not a complete ergonomic guarantee. Shape-changing treatments compete over provisional complete phrases; this is not an unbounded jointly optimized chorus. Cross-window continuation still uses bounded lookahead, so phrase partition choices can change winners even though evaluating the same sounded candidate is partition-invariant.
All four target solos have legal positions under the explicitly confirmed guitar-written octave convention. Four Autumn electric events extend beyond the source-derived production vocal cutoff. This is reported, not repaired by changing either input.
The additional source review uses independently transcribed historic-source excerpts, kept outside `data/`, after production vocabulary freeze. These are transfer diagnostics rather than a claim of comprehensive coverage of every standard, meter or arrangement convention. Optional four-target comparison uses guitar-written normalization once and explicit form alignment; original encoded evidence remains available. No auditory judgment is claimed from event/signal checks alone.
Final additional-source run: all six independent roles completed for each of After You've Gone, Indiana and Hindustan (18 role generations), with exact source excerpt timing and ordinary physical validation. [the final transfer report](../../build/composer_repair/405066e/transfer-final/report.json) records hashes, times and scope. No vocabulary was fitted from this run. Short excerpts are useful evidence of source dependence and basic transfer, not evidence that the entire standards' forms or every original piano chord are supported.
A repeated attack is now a named low-level primitive, distinct from a zero step smuggled into the nonzero interval catalog and distinct from one tied sustain. The complete-route test retains the exact authored descending path while permitting additional explicitly constructed chord/repetition routes. This deliberately changes the old one-candidate expectation, not the endpoint or scale constraint.
Unexplained reference events remain explicit. Recognizing a relationship does not inject it into construction; selecting more expression contracts does not prove a better melody. Audition remains necessary.