This commit is contained in:
khodowany
2026-10-05 08:51:03 -05:00
parent ef62af892b
commit 654299decd
25 changed files with 1695 additions and 351 deletions
+56 -17
View File
@@ -1,25 +1,64 @@
# Active path audit
# Active selector audit
Starting revision: `0e68f53` (`Cleanup`). The earlier implementation report is preserved in [baseline_0e68f53.md](baseline_0e68f53.md); its test and timing results do not describe this change.
Starting revision: `ef62af892bce168e2e9846dc6035b414f55d8959`.
Previous results are preserved in [baseline_ef62af8.md](baseline_ef62af8.md).
The current candidate baseline is under `build/solo_reference_comparison/structured/baseline`;
previously published assets were not replaced.
Before: `production.generate_role → composer.compose → construction.Builder.propose → rhythm.Rhythms.realize + routes.Routes.realize → scoring.evaluate → one-phrase lookahead → placement → validation → notation/export`.
Before: `production.generate_role → composer.compose → Builder.compose → greedy action cost per quarter → occasional dead-end backtrack → reporting phrases → placement → validation/export`.
After: `production.generate_role → composer.compose → construction.Builder → operators.Operators + selection.Selector → bounded action repair → whole-solo placement → validation → notation/export`.
After: `production.generate_role → composer.compose → Builder.compose → common-time multi-history frontiers → complete sounded-event evaluation → whole-solo winner → placement → validation/export`.
| Finding | Verified starting behavior | Change / remaining limitation |
| Finding | Reproduced evidence | Change |
|---|---|---|
| Alternatives chosen by hashes before evaluation | `propose` hash-selected timing, destination, treatment, register and first pitch; 32 proposals per batch | Enumerate shared actions before contextual ranking. Stable content ordering breaks score ties. |
| Complete target cannot pass allocation | Autumn acoustic lead-in was outside export; electric tail clipped before returning vocal | Source pickup measure allocated before composition. Full electric tail allowed with authorized vocal overlap; vocal unchanged. |
| Scorer overwritten / density silently omitted | Not reproduced: only four named phrase terms remained | One rational action evaluator; no hidden density setting. |
| Every unit closes | Not reproduced: old constructor had open alternatives, but handoff forced a 2–3 beat hold | Individual actions need no chord-tone stop; handoff can be short or silent. |
| Answer unreachable | Not reproduced: old chooser requested answers | New answer transforms the actual heard group as a complete candidate. |
| Expressions are post-processing only | Not reproduced: old proposals planned them jointly | Keep joint treatments; carry pending exact-target obligations across actions. |
| Missing expressive coverage | Reproduced against actual enumerated operators | General delayed approaches, reattacked anticipations, anticipated colors and separated enclosures. |
| Color octaves disappear | Midpoint rounding skipped alternating F-sharp octaves | Enumerate explicit legal octaves. |
| Repeated catalog parsing | Parent parsed catalogs that independent workers parsed again | Parent parse removed; content-addressed immutable JSON catalogs shared by workers. |
| Immediate commitment | DFS continued the first cheapest action; alternative histories were visited only after failure | Multiple histories survive to equal-time checkpoints; whole completed candidates compete |
| Segmentation-dependent objective | Prefix total summed individually normalized action rates | One canonical event-stream evaluation; notation ties merge and rest partitions disappear |
| Constructor-family bonuses | Acoustic `kind/arpeggio`, `kind/answer`; electric `kind/scalar`, `kind/enclosure` | Removed from data and rejected by fitted-feature schema |
| False arpeggio label | Constant scale-degree stride ±2 | Renamed `scale_thirds`; actual arpeggios walk members of the written chord |
| Premature home identity | First four eligible recent notes | Home comes from the completed opening source window and survives separately from the last-eight-note context |
| Prefix fitting | Early-update perceptron optimized first mismatch | Replaced by shared bounded integer constraints from complete outputs |
| Coverage proof lost obligations | Constrained derivation merged histories solely by time | Stateful diagnostic retains pending contracts and validates the complete resulting stream |
| Repeated expensive work | One-bar cProfile spent most cumulative time in action enumeration/validation | Cached note/route calculations; indexed sequence licensing; deferred full validation with replacement of rejected proposals |
`Operators.at` consumes source harmony, physical domain and versioned data. It records proposed, rejected-by-rule and valid counts. `Builder.candidates` retains 24 representatives by kind/duration; pending obligations filter candidates before this cutoff. `Builder.compose` ranks complete actions and allows 16 deterministic backtracks. There is no wall-clock winner, reference-reader import or old-constructor fallback.
Budget: 16 histories, 24 valid successors per history, eight completed exports.
Retrieval ranks within equal-endpoint buckets, then round-robins endpoints. It does
not compare variable-duration actions by their individual cost rates. Frontier
scores cover the same heard span. A selected action may extend beyond a checkpoint;
its actual unsplit notes, route and obligations remain stored. Computational
quarter-note checkpoints and four-source-measure home selection are not forced
cadences. Final phrase reporting does not insert notes or endings.
This is a local policy, not a globally optimized complete-phrase model. An all-onset frontier experiment was abandoned because of excessive work. Phrase objects group selected actions for validation/reporting; that grouping does not mean whole-phrase alternatives competed. This limitation matters to exact selection.
Each destructive frontier records proposed/distinct/retained counts. A read-only
development observer can compare those cuts with a training example; its return
value cannot change selection. Absence from the final eight is not proof of
unrepresentability. The ordinary build never installs that observer or imports
a training/reference reader.
The development-only `audition.fit_selection` constrains the same enumerator to an explicit target to diagnose representability. Its fitter rolls in with ordinary ranking and updates shared coefficients at the first mismatch. A valid derivation is not proof that production selects it. The release comparison checks the exported unrestricted winner separately.
This is bounded phrase/chorus comparison, not globally optimal search. Early cuts
can still lose a desirable complete phrase. Opening diversity is retained in
addition to recent rhythmic diversity; it does not guarantee eight aesthetically
different or convincing tunes.
## Reproduction failure observed in the current candidate
The optional `structured/exact-opening-pruning.json` probe observes the ordinary
first successor cutoff without changing decisions. All Me acoustic has one exact
compatible action among 9,853 and retains none; electric has two and retains none.
Autumn acoustic has two among 8,492 and retains none; electric has nine and retains
none. Every case retains 24 successors. All four therefore fail at retrieval,
before complete-output selection. The earlier `opening-pruning.json` compared
clipped audible prefixes and counted a shortened hold as surviving. That weaker
diagnostic was corrected: committed attacks must match their complete durations.
Separate stateful constrained derivation reaches all four complete targets with
no diagnostic history pruning; that establishes construction coverage only.
Full generation also confirms a ranking failure: all four complete targets score
worse than their selected outputs under the default evaluator. Exact totals and
contribution differences are in `evaluation-diagnosis-all.json`. Eight surviving
complete alternatives are not proof that the necessary alternatives survived.
The first full regression run also exposed optional-color lookahead parsing an
explicit `N.C.` span as a chord. `eligible_color` now rejects missing/no-collection
harmonic spans before parsing. The current production sources' affected contexts
are recorded separately so a build started before that repair is not silently
described as a build from identical code.
+76
View File
@@ -0,0 +1,76 @@
# Exact-target composer repair — release status
**Not released. Exact production reproduction of the four targets has not been achieved.** Valid derivations exist for all four complete event streams, but a target-constrained derivation is not an unrestricted production winner. The existing published assets remain intact. The previous release's report is [archived here](baseline_0e68f53.md); its tests and performance numbers do not apply to this rewrite.
Starting revision: `0e68f5364bb0196ab1b7087ecc186f5d7446c42b`. Preserved baseline: `build/solo_reference_comparison/repair/baseline/`. Its `inputs.json` records source/data/reference hashes and initial cache state. The sources remain `data/songs/all-of-me.xml` and `data/songs/autumn_leaves.xml`; no archive source has replaced either.
## Acceptance and target identity
The exact target files are `build/all-of-me-solo-1.xml`, `build/all-of-me-solo-2.xml`, `build/autumn-leaves-solo-1.xml`, and `build/autumn-leaves-solo-2.xml`. Solo 1 is acoustic; Solo 2 is electric. They are untouched. The optional adapter applies the confirmed guitar-written octave convention and merges ties while preserving repeated attacks. Autumn aligns at the first Gm7 in measure 2, including the entire preceding measure at negative chorus-relative times. All of Me aligns at measure 1.
The latest approved development scope allows target-guided general-rule work and shared-coefficient fitting, but prohibits stored tunes, per-song recipes and runtime target reads. No fitted model is promoted automatically. Optional development tools and their artifacts remain outside production imports and cache identities.
The baseline exact comparison returned failure: All of Me acoustic/electric had 0/3 exact matching attacks; Autumn acoustic/electric had 0/0. Differing onset positions were 205, 201, 211 and 178 respectively, and rests differed in all four. These are exact-event diagnostics, not musical-quality scores.
## Changes in this working tree
The hash-preselected phrase constructor and separate route solver are replaced by enumerable joint musical actions, one interpretable rational evaluator and bounded deterministic backtracking. Actions include ordinary notes/rests, complete degree routes, realized-theme returns/answers, colors, approaches, enclosures and anticipations. Pending treatments carry their actual future targets and deadlines across actions. Whole-line guitar placement follows selection; it cannot change the tune or inspect another generated part.
General expressive rules now cover delayed exact-target approaches, separated enclosures, reattacked anticipations and anticipated colors. Color octave enumeration no longer loses alternating F-sharp registers through rounding. The base scale vocabulary remains the same 21 collections; exceptions have typed, bounded contracts. Full target endings and source-derived pickup allocations are supported. Electric may overlap the returning vocal pickup as authorized; source vocal events remain unchanged.
Performance changes remove redundant parent catalog parsing, add content-addressed non-executable catalog JSON, memoize pure chord/color/spelling checks, and avoid building full rational contribution reports for thousands of rejected candidates. The lightweight ranking total and detailed evaluation are equal and tested. Existing independent process workers remain available.
The development fitter uses only shared whitelisted musical features and integer updates. An initial trial exposed two defects: unordered source-interval evidence and per-attack rewards that favored subdivisions. Ordered source relationships and duration-normalized rewards repaired them. A later trace exposed indistinguishable pending targets; their relative delay, step and hold now enter selection explicitly. Interrupted diagnostic trials are not reported as completed fitting or benchmark results.
## Evidence and limitations
The staged build completed with `--check`: six performance scores, complete solo XML, notation/TAB, playback assets, and independent accompaniment for both current sources. It is under `build/solo_reference_comparison/repair/staged`, not the published asset directory. The exact gate returned exit code 1:
| Output | Generated / target attacks | Exactly matching attacks | Differing onset positions | Exact result |
|---|---:|---:|---:|---|
| All of Me acoustic | 118 / 137 | 2 | 189 | Fail |
| All of Me electric | 128 / 141 | 0 | 232 | Fail |
| Autumn Leaves acoustic | 106 / 121 | 1 | 177 | Fail |
| Autumn Leaves electric | 143 / 115 | 5 | 195 | Fail |
Rests differ in every case. These results are not close reproduction, and attack counts are not a substitute for matching the requested music. The full comparison page is `build/solo_reference_comparison/repair/comparison/index.html`. It includes untouched references, the baseline and staged XML, complete solo-only and fixed-backing WAVs, opening excerpts, and exact note differences. Rendering used one neutral treatment and constant shared gains; no ear-based audition was performed.
The actual selected events and TAB were checked against all four reparsed exports: all agree. Thus these discrepancies arise in composition/selection, not from an exporter shifting the selected melody. Source vocal and electric head documents are unchanged from the baseline. Accompaniment documents changed with the shared difficulty configuration and the source-derived participation allocation; they are still independently generated. Source and reference SHA-256 values, and the previously published solo exports, remain unchanged. Evidence: `repair/asset-verification.json`.
The fitting trial was stopped after **40 completed passes of its configured 200-pass maximum**, without convergence. Every pass still had four incorrect rollouts; the best had only eight matching prefix attacks in total across the four cases. This is an interrupted diagnostic trial, not a completed 200-pass result and not a proof that every shared model is infeasible. Its best coefficients remain development-only under `repair/fitting`; none were copied to production data.
A further normal-production check of that best checkpoint completed All of Me acoustic: **5 matching attacks, 223 differing onset positions, and different rests**; it also failed the exact gate. The other fitted-model jobs were interrupted without completed exports. This is not a four-case fitted-model release test. Its completed XML and comparison are in `repair/fitted` and `repair/fitted-comparison`; the interruption is recorded in `repair/fitted-build-status.json`. The complete four-case results above use the unfitted production defaults.
The default selection trace explains an important failure. All of Me acoustic selected 29 arpeggio actions and six returns; electric selected 32 scalar actions, nine returns and one ordinary tone. No standalone rest won in either output. Many legal expressive candidates were proposed and rejected by score. The role's action-kind preferences overwhelm much of the vocabulary, and the local policy has no complete-phrase destination comparison. Adding legal actions has not repaired that selection limitation.
### Commands actually validated
All commands use `build/build_common/python/bin/python3 build/build_tools/python_runner.py build/build_common/modulus` as their prefix. Exact invocations are in [commands.md](commands.md).
- `-m unittest discover -s tests -p 'test_*.py'`: **446 tests passed in 348.905 seconds** (`repair/verified-tests.log`).
- `-m unittest tests.test_solo_comparison`: **9 tests passed in 0.083 seconds** after removing an invalid optional report link (`repair/comparison-tests.log`).
- `-m audition.dependency_check --output .../dependency-final`: passed all six roles, including an operational electric register change that changed that role's document and left the other roles intact.
- Full staged `-m generator ... --check --jobs 2 --composition-jobs 2 --export-solo-xml`: passed. The first attempt exposed an unfillable final quarter-beat; a tempo-gated sixteenth note/rest primitive and a regression test repaired that failure before the successful build.
- `-m audition.solo_compare ... --require-exact`: failed all four outputs, as shown above. This is the release-blocking musical result, not a passing check.
- Full-score selected-event/TAB verification and source/reference/published-baseline hash checks: passed (`repair/asset-verification.json`).
The staged asset run took **430.402 seconds** with two composition workers and warm generic catalog/non-solo caches. Tests and development fitting were running concurrently, so that time is not an isolated speed benchmark. Solo role times were 156.117, 228.292, 182.301 and 174.160 seconds in that run. No cold-generation speedup is claimed from these numbers. The full recorded stage timings and actual read traces are in `repair/build-profile.json`.
After other generation/rendering jobs stopped, `-m audition.benchmark --source data/songs/all-of-me.xml --role acoustic_solo --cache .../performance/cache --output .../performance/cold` took **134.722 seconds** for the role, plus 0.046 seconds for source analysis, with one worker and an empty concrete/catalog cache. Repeating it with `--output .../performance/warm` took **2.068 seconds** with a role-cache hit. Hardware/runtime: 12 reported CPUs, Linux 7.2.3 x86-64, repository Python environment; cProfile disabled. Cold, warm and parallel-full-build documents have the same hash `adcc372315aa10cae8a956cc5002700859c81cdcf4eeaa59b4ae6f8b41161baf`. Evidence: `repair/performance/summary.json` and the two benchmark records.
The requested cold-generation reduction is **not achieved**. Warm memoization avoids recomposition, but the wider action enumeration is still expensive. The historical baseline's different music, algorithm and benchmark conditions do not support a controlled speedup ratio. Candidate construction/evaluation remains the dominant recorded stage; no further beam expansion is justified by these results.
- [Active path, reproduced findings and search limits](active_path_audit.md)
- [Data migration and provenance](data_migration.md)
- [Authoritative evaluation and fitting contract](evaluation_contract.md)
- [Capabilities and unimplemented behavior](musical_capability_matrix.md)
- [Independent-input checks](dependency_proof.md)
- [Reproduction and exact-release commands](commands.md)
Detailed winning/runner-up contributions, selected note groups and proposal/valid/retained/selected counts are in `build/solo_reference_comparison/repair/decisions.md`. Superseded diagnostic logs are consolidated in `repair/diagnostic-history.zip`; current evidence, the baseline and targets remain intact.
The search is a local action policy, not a global complete-phrase optimizer. Dedicated suspension/blues constructors and two-sided phrase revision are not present in this replacement; validators remain. Source influence and the short realized home theme are limited models of melodic identity. A catalog containing thousands of paths does not mean all those paths currently compete as complete musical ideas. No new held-out source-standard evaluation set was added. Existing synthetic transposition/meter/harmony tests do not establish generalization to an unseen standard or subjective musical quality.
The earliest demonstrated remaining failure is selection: legal target-compatible actions lose even at the opening, and later action choices collapse toward a few favored families. The next justified investigation is whether a shared context model can distinguish those conflicting choices over complete phrases, before adding more rules, expanding the beam, or running another long fit. The finite trial here does not settle that question. There is no automatic fallback to reference notes or previous output.
Technical completion, exact target equality and listener preference are separate. No ear-based audition is claimed. The release remains blocked unless all four unrestricted exported comparisons pass; a valid or stylistically plausible mismatch is not substituted for that requirement.
+62 -9
View File
@@ -10,13 +10,13 @@ The commands below go after that prefix. They write only the consolidated repair
```sh
-m unittest discover -s tests -p 'test_*.py'
-m audition.dependency_check --output build/solo_reference_comparison/repair/dependency
-m audition.dependency_check --output build/solo_reference_comparison/structured/dependency
```
Development-only derivation/fitting (use `explain` instead of `fit` for coverage alone):
Development-only stateful derivation / complete-output fitting (use `explain` instead of `fit` for coverage alone). Install the optional solver with repository Python and `-m pip install --target build/development_packages -r audition/requirements-training.txt`. Production does not load that directory:
```sh
-m audition.fit_selection fit --passes 200 \
-m audition.fit_selection fit --passes 8 --solver-path build/development_packages \
--source all_me_a=data/songs/all-of-me.xml --source all_me_e=data/songs/all-of-me.xml \
--source autumn_a=data/songs/autumn_leaves.xml --source autumn_e=data/songs/autumn_leaves.xml \
--reference all_me_a=build/all-of-me-solo-1.xml --reference all_me_e=build/all-of-me-solo-2.xml \
@@ -24,30 +24,83 @@ Development-only derivation/fitting (use `explain` instead of `fit` for coverage
--role all_me_a=acoustic_solo --role all_me_e=electric_solo \
--role autumn_a=acoustic_solo --role autumn_e=electric_solo \
--form-start all_me_a=1 --form-start all_me_e=1 --form-start autumn_a=2 --form-start autumn_e=2 \
--cache-dir build/solo_reference_comparison/repair/cache --output build/solo_reference_comparison/repair/fitting
--cache-dir build/solo_reference_comparison/structured/cache --output build/solo_reference_comparison/structured/fitting
```
Production stage (no reference arguments):
```sh
-m generator --data-dir data --output-dir build/solo_reference_comparison/repair/staged \
-m generator --data-dir data --output-dir build/solo_reference_comparison/structured/staged \
--static-assets-dir package/assets --check --jobs 2 --composition-jobs 2 \
--composition-cache build/solo_reference_comparison/repair/cache \
--composition-cache build/solo_reference_comparison/structured/verified-cache \
--engraving-cache build/build_common/engraving_cache --export-solo-xml --trace-level full \
--profile-output build/solo_reference_comparison/repair/build-profile.json --progress
--profile-output build/solo_reference_comparison/structured/build-profile.json --progress
```
Exact gate after generation:
```sh
-m audition.solo_compare --generated-dir build/solo_reference_comparison/repair/staged/solo_xml \
-m audition.solo_compare --generated-dir build/solo_reference_comparison/structured/staged/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 all_of_me/acoustic=1 --form-start all_of_me/electric=1 \
--form-start autumn_leaves/acoustic=2 --form-start autumn_leaves/electric=2 \
--reference-pitch guitar-written --output build/solo_reference_comparison/repair/comparison --require-exact
--reference-pitch guitar-written \
--baseline-dir build/solo_reference_comparison/structured/baseline/solo_xml \
--assets build/solo_reference_comparison/structured/staged \
--output build/solo_reference_comparison/structured/comparison --require-exact
```
`--require-exact` returns 1 on any sounding-event/rest mismatch; it does not reinterpret a similar style as success. Add `--assets <completed-assets>` for consistent neutral rendering. A failed fit or exact gate is not permission to copy targets, promote a target-constrained derivation, or publish a mismatched stage. Normal CMake publication is intentionally deferred until the approved acceptance gate passes.
Individual roles remain available through `-m generator.compose --song ... --role acoustic_solo --data-dir data --cache-dir ... --output ... --solo-xml ...`. Use `-m audition.benchmark --source ... --role ... --cache ... --output ...` for an isolated measurement after other builds/tests/fits stop. Profiling changes measured runtime; do not compare a cProfile run to an unprofiled build as a speedup ratio.
Source-only four-bar completed alternatives (the XML marked candidate 1 is the automatic winner):
```sh
-m audition.phrase_candidates --source data/songs/all-of-me.xml --role acoustic_solo \
--bars 4 --cache-dir build/solo_reference_comparison/structured/cache \
--output build/solo_reference_comparison/structured/four-bar
```
No solver output or constrained derivation may replace an ordinary production score.
The exact four-complete-output gate remains mandatory. Reference absence proves a
runtime boundary only; learned coefficients still depend on their training data.
A completed ordinary build can supply the negative candidates for one learning
round without repeating inference just to reconstruct its report. Use
`-m audition.train_completed` with the same `--source`, `--reference`, `--role`,
and `--form-start` case arguments, plus `--completed-dir <assets>`,
`--solver-path build/development_packages`, and `--output <development-round>`.
`--stage-data` creates a separate production-data copy with the proposed shared
weights. It does not edit `data/` or published assets. Feed that copy to the normal
`-m generator --data-dir ...` command for a new cold target-free build, then run
the complete four-output exact gate. A solver that separates eight saved
candidates has not demonstrated exact generation.
For later complete-output rounds, add `--previous-round <earlier-training.json>`
to retain prior counterexamples. Incompatible source/example identities,
evaluation versions or fixed musical policy are rejected. Only learned weights
may change between compatible rounds. Do not fit only the latest eight outputs
and silently forget the earlier failures.
The first proposed model's ordinary trial uses the same production command with
`--data-dir .../round-1/data --output-dir .../learned-stage`, separate
`--composition-cache .../learned-cache`, `--composition-jobs 4`, and
`--profile-output .../learned-build-profile.json`. This process receives no
reference arguments. Comparison and learning are separate later commands.
The completed second fit used `--data-dir .../round-1/data`,
`--completed-dir .../learned-stage`,
`--previous-round .../round-1/evidence/training.json`, and
`--output .../round-2`, with the same four source/reference/role arguments.
It accumulated 64 full-output inequalities. Its successful solver status is
not a release: the acoustic openings still fail the strict cutoff diagnosis,
and no third complete ordinary rollout was performed.
Final focused tests were run with `PYTHONPATH=build/development_packages` and
`-m unittest tests.test_joint_actions tests.test_structured_selection` (35 passed).
The latest dependency check uses `--output .../dependency-cached`.
The read-only staged verification script also accepts
`--stage learned-stage --data-dir .../round-1/data --prefix learned-`.
All comparison artifacts are linked from `structured/index.html`.
+28 -1
View File
@@ -1,6 +1,6 @@
# Data and consumer migration
The latest approved scope permits target-guided diagnosis of general rules and fitting shared theory coefficients. Production target reads, copied tunes, per-song recipes and hidden phrase banks remain prohibited. Policy provenance records this development influence; these four targets are not an unseen evaluation set. A development weight artifact is not automatically a production resource.
The latest approved scope permits target-guided diagnosis of general rules and fitting shared theory coefficients. Production target reads, copied tunes, per-song recipes and hidden phrase banks remain prohibited. Policy provenance records this development influence; these four targets are not an unseen evaluation set. A development weight artifact is not automatically a production resource. The first table records the inherited migration at the starting revision; the selector-repair section below identifies this iteration's changes.
| Path | Action | Live consumer / reason |
|---|---|---|
@@ -23,3 +23,30 @@ The latest approved scope permits target-guided diagnosis of general rules and f
The formulas are general relative intervals and durations, not extracted phrases. Supporting discussion: [Berklee tension and resolution](https://www.berklee.edu/berklee-today/summer-2014/tension-and-resolution), [available tensions](https://college.berklee.edu/berklee-today-55), [Locrian natural six](https://www.jazz-guitar-licks.com/pages/guitar-scales-modes/modes-of-the-harmonic-minor-scale/the-locrian-natural-6-mode.html). No example melody from these sources was imported. Numerical bounds are project choices, not universal jazz rules. Authored resources retain MIT licensing.
Cold-build independence cannot establish provenance alone; review policy/code diffs too. No source score, target score, tuning, fret limit, runtime score schema, velocity or playback feel was changed.
## Selector repair at ef62af8
No scale, sequence, rhythm, harmony, lead-in, source-song or accompaniment vocabulary
was added or removed in this step. The live solo budget now names `histories=16`,
`per_state=24`, and `completed=8`; the obsolete `backtracks` setting is removed.
Role-level constructor-family weights were removed. Existing duration/metrical
preferences remain. Both roles still use all six strings and frets 1–12.
`Operators` now distinguishes scale thirds from written-chord arpeggios. Sequence
licensing is indexed once. Harmonic interval permissions, note objects and color
construction are memoized without changing their underlying theory rules.
Expensive validation can be deferred past cheap retrieval, but a candidate must
pass before it advances. The ordinary `Operators.at` diagnostic still returns
fully validated actions.
The old prefix-perceptron implementation was removed from `audition/fit_selection.py`.
Its replacement is `audition/structured_learning.py`, with the pinned optional
solver in `audition/requirements-training.txt`. Neither is imported by production.
`audition/phrase_candidates.py` exports ordinary completed alternatives without
accepting any target-file arguments. Failed development models remain under
`build/solo_reference_comparison/structured`; none is automatically copied to data.
`audition/train_completed.py` can form complete-output ranking constraints from
ordinary finished candidate reports. It verifies the source, role, vocabulary,
and evaluation version, and records explicit training dependencies. Its optional
staged data copy is for a subsequent ordinary cold build, not automatic promotion.
+26 -14
View File
@@ -1,25 +1,37 @@
# Independent inputs and reproducibility
Production consumes canonical source music, relevant versioned production data, role settings and `joint-actions-1`. Optional targets, comparison outputs and completed parts are not runtime musical inputs. The separate development fitter is allowed to inspect explicit targets; that is development influence, not a runtime read. Failed fitted artifacts are not promoted.
Production consumes canonical source music, relevant production data, role settings and `phrase-frontiers-2`. References, training outputs and prior published parts are not runtime musical inputs. Any coefficients learned by the separate development commands explicitly depend on their training examples; that is not complete independence from those examples. No learned proposal has been promoted.
`input_audit.composition` records actual reads and rejects paths outside production data, generator code, the Python runtime, the current role's concrete cache and a narrowly shared `_resources` catalog cache. The latter contains only compiled generic production catalogs, keyed by content and decoder semantics, with a payload checksum. Other roles' concrete caches remain forbidden. Tests also cover corrupted catalog regeneration.
`input_audit.composition` records actual reads and rejects paths outside production data, generator code, Python, the current role's own concrete cache and the checksummed immutable `_resources` catalog cache. Other roles' concrete caches are prohibited. The optional training/comparison modules are not imported by production.
The explicit `audition.dependency_check` passed for all six roles on an independently authored one-bar source using real production catalogs:
## Current exercised boundary
- Alone/cold versus reversed order/warm.
- Serial versus two spawned processes/cold.
- Deliberately invalid optional targets present versus removed/cold.
- Rebuilding after an electric-only setting change.
`audition.dependency_check` passed for an independently authored one-bar source with real production catalogs and all six roles:
Evidence, actual read paths and all six hashes: `build/solo_reference_comparison/repair/dependency-final/dependency.json`. The changed electric register produced hash `bf16a8b06e38ab50384d98a1fdd6bf13d62eddc1eaf350dd91d2186ca39d92ee`, proving the exercised setting changed music rather than only invalidating a cache. Example unchanged solo document hashes:
- Each role alone with cold caches, then reversed order with warm caches.
- Two spawned processes with cold caches.
- Deliberately invalid optional targets present, then absent, with cold generation.
- An electric-only register change that changed the electric output, followed by unchanged hashes for the original settings of every role.
- Acoustic: `6ded04c27b1ee638644b0717be095ff1af5820da17b89876e5c89f1e18901997`.
- Electric: `56b7bc09146facb91c0dc0ffe71dbdd0239d23d5fab5955c2b3fe7e03b94a882`.
Evidence and actual read paths are in `build/solo_reference_comparison/structured/dependency-cached/dependency.json`. All six cases equal the preceding `dependency-final/dependency.json` and `dependency/dependency.json` runs. Canonical musical document hashes:
This is a dependency test, not a whole-song musical or performance assessment. Separate full-source checks in `repair/asset-verification.json` establish that all four selected event streams and TAB match reparsed exports, source vocal/head documents are unchanged, and the source/reference/published-baseline hashes remain unchanged.
- `acoustic_accompaniment`: `45658c437f6a19991246a4dcf2966d0de90ace8bbb71deae7899614ad12dc6da`.
- `electric_accompaniment`: `89bbf33108dfc428e59a141414059aa9ec8a23d6efd00e842adbeba32913d7b8`.
- `electric_melody`: `b8d18ef6fd65b204bd2fc2b69e660068890cb30aea6db827c3f3b506284ea2a1`.
- `vocal_melody`: `e3348117b9c63771cfa0439f276bdadf0d26dd6e560c9676c97e12a4a713737b`.
- `acoustic_solo`: `84328ecb944f52ab5cdd16b143546831116d9c83edefbe307e16af967e785d8e`.
- `electric_solo`: `c9741203d6d4a9df7f4d3a83b0bca72744c657bd49bc41a80842fb25ec468a07`.
The complete All of Me acoustic solo also has identical musical document hash in the independent cold benchmark, warm own-role cache build and two-worker full production build: `adcc372315aa10cae8a956cc5002700859c81cdcf4eeaa59b4ae6f8b41161baf`. This strengthens the synthetic proof for that full source/role; it does not claim an isolated cold/warm benchmark for every role.
Changed electric configuration: `146b3efa50acd7db14f40d61637bbb55f1feb456abfa7f29750ca1133218743c`.
Canonical ordering is independent of requested-role order and worker completion. Ties resolve through stable musical content keys. Catalog/report/cache implementation changes invalidate affected cached representations without intentionally changing the semantic generation version. Timing and observed-read diagnostics remain outside the musical document.
This establishes the exercised dependency boundary, not whole-song aesthetic quality or exact reproduction. It is not a four-full-song cold/warm timing benchmark. The ordinary regression suite also exercises source-melody changes, irrelevant title/ID changes, role settings, tuplets and canonical accompaniment reuse.
Deletion tests cannot detect target-derived material already embedded in code/data. Review new rule provenance and the explicit learned-feature whitelist separately. The development vocabulary is target-guided, and these examples are not claimed as unseen generalization evidence.
The two complete production builds provide an additional whole-song check:
changing the shared solo coefficient tables changed both solos but left all eight
non-solo role documents identical across both songs. Canonical hashes are in
`structured/full-song-role-independence.json`. This does not replace the standalone
role tests or establish exact reproduction; both full models failed that gate.
New model feature schemas prohibit song names, titles, file paths, hashes, absolute bar indices, arbitrary predicates and event-sequence banks. This bounds the induction representation but cannot by itself prove that every possible fitted model generalizes. Training provenance and held-out evaluation remain necessary.
The earlier local-policy dependency and full-song benchmark results belong to the archived baseline report. They must not be quoted as current whole-song equivalence evidence.
+100 -8
View File
@@ -1,15 +1,107 @@
# Authoritative action evaluation
# Canonical phrase evaluation and shared learning
`selection.Selector.evaluate` returns `Evaluation(version='action-selection-1')`: raw normalized values, enabled weights, exact rational contributions, total and denominators. Ranking uses exactly the sum of reported contributions. Tied continuations merge before evaluation; repeated attacks remain distinct.
`Selector.complete(actions, home, start, end)` is authoritative. It concatenates
selected sounding events, merges only explicit ties, reconstructs silence, and
calls the versioned `phrase-selection-2` evaluator. Its exact rational total is
the sum of its reported contributions. Constructor labels earn no reward.
The same sounded music and home identity have the same complete evaluation
regardless of action partitioning. Repeated attacks remain different from ties.
The scope is one complete musical action, not a chorus. Alternatives compete by cost per exact quarter; compound routes remain indivisible. Prefix and reporting-phrase totals sum local decisions. They are diagnostics, not global objectives or partition-invariant phrase quality scores. Computational partitioning that preserves the action objects does not change evaluation. Changing musical action boundaries can change the local search objective.
The record exposes raw normalized values, weights, contributions, total, span and
attack count. Common-time frontiers score only the heard portion; the remaining
route is preserved in search state. Pending future treatment features are not a
claim that a resolution has already sounded. Completed alternatives cover the
same allocation. Retrieval costs are explicitly heuristics, not published
whole-phrase scores. Expensive validation runs before a retained successor may
advance; rejected proposals are replaced from their endpoint bucket.
Fixed priors address excessive leaps, register distance outside a soft corridor, oscillation, repeated attacks, unprepared space, repeated rests, source interval relationships, actual theme relationships, sustained chord-tone arrivals and directed steps. Shared integer coefficients can distinguish action kind, duration, chord-relative pitch role, incoming interval, relative metric position, motion direction, register band, source rhythm, realized theme evidence and context of silence. Title, filename, absolute bar index, reference hash and event lookups are not allowed features.
General priors concern large leaps, a soft register corridor, oscillation,
repeated attacks, interruption, ordered source relationships, realized-theme
recurrence, sustained chord-tone arrival, and directed motion. Learned features
may describe duration, relative metrical placement, chord quality/relative pitch,
relative motion, register band, source rhythm, theme recurrence, silence context,
and bounded pending obligations. Silence has no fabricated register. Missing
harmony covers only the actual unharmonized interval, not the rest of a phrase.
Silence has no pitch/register value. A rest after an arrival differs from an interruption or repeated rest. A sustain is one attack with its complete duration. Approved expression is validated by contract rather than automatically rewarded or penalized as chromatic.
## Development learning
Hard validity remains separate: mapped collections, typed exceptions, exact target register/time/duration, pending deadlines, rhythm groups, physical domain, monophony and source-derived allocation. Pending obligations filter the frontier before pruning. Final placement cannot change selected pitches or rhythm.
`audition.fit_selection fit` uses completed ordinary source-only rollouts.
`audition.structured_learning` adds shared within-role ranking inequalities and
uses pinned development-only `z3-solver==4.13.3.0`. Coefficients are integers within
±1024. Objectives minimize nonzero coefficients then total absolute magnitude;
solver work uses a deterministic resource budget. Exhaustion returns no model.
An unsatisfiable core means incompatibility within this schema/bound, not a proof
that no generic musical model could reproduce the examples.
The optional fitter uses an integer early-update structured perceptron, at most 200 passes. Coefficients are shared between songs within each role. Its checkpoint prefers fewer incorrect rollouts, then longer exact prefixes, then smaller coefficients. This differs from minimizing whole-output discrepancy; full export comparison remains the acceptance gate. Fitted artifacts stay under `build/` until a verified model is deliberately promoted. Constructibility alone is not grounds for promotion.
`audition.train_completed --previous-round` retains prior complete-output
constraints. It verifies source/example hashes, role, evaluator, semantic
algorithm, fixed priors and production data with learned weights excluded.
Only changing weights or their provenance permits reuse; changing the underlying
musical conditions requires a new, explicitly identified training experiment.
Duplicate inequalities are removed. No previous generated part becomes a
production input: these are development-only learning records.
Synthetic tests check contribution sums, weight counterfactuals, tied-event invariance, forbidden feature names and a learnable two-choice fitting problem. They establish mechanics, not that this finite feature set expresses the four desired decisions or predicts musical preference.
Before combinatorial optimization, the fitter checks exact integer intervals for
zero or one nonzero coefficient per independent role. If all roles admit these,
enumerating every allowed feature proves the minimum support and its minimum L1
solution directly. This repaired a measured solver-budget exhaustion on a small
feasible problem; it changes the solver strategy, not the acceptance gate.
The post-fit first-successor diagnostic can disprove full reproduction when no
compatible opening survives. Surviving that check cannot prove reproduction.
Compatibility requires the complete committed attack duration. A clipped match
to the first portion of a target hold does not count as surviving reproduction.
Only demonstrated identical-feature conflicts may request a new conjunction of
two or three whitelisted conditions. Conditions are chord quality, root-relative
degree, relative motion, metrical category, duration, and ordered source evidence.
No source ID, title, path, hash, absolute measure, target sequence, arbitrary
predicate, or per-song branch is admitted. Constructor-family weights are rejected.
Conjunction semantics have independent positive, negative and transposition tests.
Any actually induced rule is recorded as training-dependent; no untested learned
rule or solver result is promoted automatically.
The training examples may affect coefficients and induced rules. That is an
explicit training dependency. Production target-file absence does not prove
independence of learned knowledge from those examples. Runtime composition uses
plain validated coefficient data, not Z3, target paths or a phrase-retrieval bank.
The previous prefix fitter is retired. Target-constrained derivation remains only
a stateful coverage probe, never a generated winner. A completed training iteration
is not the release gate: separate cold ordinary role builds and full exported
sounding-event/rest equality are still mandatory for all four authored targets.
## Exact performance shortcuts
`Selector.extend` updates sufficient statistics by replacing the affected tail
and seam, retaining enough preceding context for source interval pairs,
oscillation and a complete possible home-theme match. A newly established home
or explicit tied continuation takes the complete-evaluation path. Pending-target
features are recalculated for the new horizon. Regression tests compare every
incremental record against canonical complete evaluation.
Retrieval caches internal route contributions but recalculates incoming pitch
relationships and the meaning of a leading rest. Weights are immutable validated
mappings; changing the mapping invalidates weighted caches. Past-frontier concrete
candidates are evicted after all incoming histories have been considered; selected
events remain in immutable search histories. These cache lifetimes are not musical
inputs or wall-clock search budgets.
Theme signature equality short-circuits on the first actual differing feature;
home signatures are cached while retaining their immutable home objects. The
comparison is exactly equivalent to normalized onset/duration/relative-pitch
tuple equality. It does not approximate thematic similarity or change scores.
Unconditional retrieval combines cached unary, transition, gap and pending-target
costs directly instead of allocating full feature reports for every rejected
action. Tests compare the result with the authoritative feature calculation
across all action families, incoming histories and weight changes. Learned joint
conditions and explicit tied fragments take the complete feature path; no missing
contextual term or altered tied duration is silently dropped by the shortcut.
Repeated endpoint retrieval is memoized only for the same immutable action
catalog, exact frontier, last three pitches/release, incoming sustained/rest
classification, pending contracts, weights and budget. Full home-aware candidate
evaluation still runs with the real history. Weight changes invalidate the cache;
retaining the catalog object prevents object-ID reuse. Tests distinguish pending
targets and incoming hold durations, and a complete four-bar rerun preserves all
events, candidate evaluations and frontier records.
+95 -46
View File
@@ -1,76 +1,125 @@
# Exact-target composer repair — release status
# Complete-phrase selection and shared-rule learning
**Not released. Exact production reproduction of the four targets has not been achieved.** Valid derivations exist for all four complete event streams, but a target-constrained derivation is not an unrestricted production winner. The existing published assets remain intact. The previous release's report is [archived here](baseline_0e68f53.md); its tests and performance numbers do not apply to this rewrite.
**Exact reproduction is not achieved. The published baseline is unchanged.** The four complete authored solos remain the acceptance criterion. Legal construction, matching prefixes, learned rankings and passing tests do not satisfy it.
Starting revision: `0e68f5364bb0196ab1b7087ecc186f5d7446c42b`. Preserved baseline: `build/solo_reference_comparison/repair/baseline/`. Its `inputs.json` records source/data/reference hashes and initial cache state. The sources remain `data/songs/all-of-me.xml` and `data/songs/autumn_leaves.xml`; no archive source has replaced either.
Starting revision: `ef62af892bce168e2e9846dc6035b414f55d8959`. The preceding report is [archived](baseline_ef62af8.md). Current evidence is consolidated in `build/solo_reference_comparison/structured/`; `baseline/` preserves the previous complete comparison output. Saved output is never a production input.
## Acceptance and target identity
## Active implementation
The exact target files are `build/all-of-me-solo-1.xml`, `build/all-of-me-solo-2.xml`, `build/autumn-leaves-solo-1.xml`, and `build/autumn-leaves-solo-2.xml`. Solo 1 is acoustic; Solo 2 is electric. They are untouched. The optional adapter applies the confirmed guitar-written octave convention and merges ties while preserving repeated attacks. Autumn aligns at the first Gm7 in measure 2, including the entire preceding measure at negative chorus-relative times. All of Me aligns at measure 1.
The production path is `production.generate_role → solo.composer.compose → construction.Builder → placement → validation/export`. The former builder committed the cheapest next action and backtracked only after failure. It now retains histories through common exact-time frontiers and selects among completed event streams. Limits are 16 histories, 24 successors per history and eight completed exports. A route, sounding tail and pending harmonic obligation survive a computational frontier.
The latest approved development scope allows target-guided general-rule work and shared-coefficient fitting, but prohibits stored tunes, per-song recipes and runtime target reads. No fitted model is promoted automatically. Optional development tools and their artifacts remain outside production imports and cache identities.
`Selector.complete` is the authoritative `phrase-selection-2` evaluator. It merges explicit ties, reconstructs silence and reports the contributions actually used for selection. Action labels no longer earn numerical rewards. `scale_thirds` means alternate scale-degree walks; `arpeggio` walks written chord members. A completed opening owns the home identity, separately from the eight-note recent-history buffer.
The baseline exact comparison returned failure: All of Me acoustic/electric had 0/3 exact matching attacks; Autumn acoustic/electric had 0/0. Differing onset positions were 205, 201, 211 and 178 respectively, and rests differed in all four. These are exact-event diagnostics, not musical-quality scores.
A controlled test retains a locally more expensive opening and selects it when it produces the better completed phrase. Tests also cover partition invariance, pending continuation, arpeggios, home identity, deferred validation and exact incremental scoring. These establish selector behavior, not aesthetic quality or global optimality.
## Changes in this working tree
No source song, scale family, rhythm catalog, accompaniment vocabulary, fret domain, runtime schema or performance expression changed. Production data changes remove action-family bonuses and replace the backtrack budget. Missing/no-collection harmony now rejects optional colors before parsing `N.C.`. Fast retrieval uses canonical evaluation for tied fragments and learned contextual rules.
The hash-preselected phrase constructor and separate route solver are replaced by enumerable joint musical actions, one interpretable rational evaluator and bounded deterministic backtracking. Actions include ordinary notes/rests, complete degree routes, realized-theme returns/answers, colors, approaches, enclosures and anticipations. Pending treatments carry their actual future targets and deadlines across actions. Whole-line guitar placement follows selection; it cannot change the tune or inspect another generated part.
## Complete default-build result
General expressive rules now cover delayed exact-target approaches, separated enclosures, reattacked anticipations and anticipated colors. Color octave enumeration no longer loses alternating F-sharp registers through rounding. The base scale vocabulary remains the same 21 collections; exceptions have typed, bounded contracts. Full target endings and source-derived pickup allocations are supported. Electric may overlap the returning vocal pickup as authorized; source vocal events remain unchanged.
The staged build passed `--check` and produced six arrangement scores, complete solos and independent accompaniment for both songs. It is in `structured/staged`, not the published asset directory.
Performance changes remove redundant parent catalog parsing, add content-addressed non-executable catalog JSON, memoize pure chord/color/spelling checks, and avoid building full rational contribution reports for thousands of rejected candidates. The lightweight ranking total and detailed evaluation are equal and tested. Existing independent process workers remain available.
| Output | Generated / target attacks | Matching pitch/onset/release attacks | Full exact result |
|---|---:|---:|---|
| All of Me acoustic | 116 / 137 | 0 | Fail |
| All of Me electric | 333 / 141 | 2 | Fail |
| Autumn Leaves acoustic | 164 / 121 | 1 | Fail |
| Autumn Leaves electric | 311 / 115 | 6 | Fail |
The development fitter uses only shared whitelisted musical features and integer updates. An initial trial exposed two defects: unordered source-interval evidence and per-attack rewards that favored subdivisions. Ordered source relationships and duration-normalized rewards repaired them. A later trace exposed indistinguishable pending targets; their relative delay, step and hold now enter selection explicitly. Interrupted diagnostic trials are not reported as completed fitting or benchmark results.
Rests differ in every case. These are substantial failures, especially the electric parts' continuous activity. Counts are diagnostics, not substitute acceptance thresholds. The exact comparison command returned **1**.
## Evidence and limitations
The [comparison page](../../build/solo_reference_comparison/structured/comparison/index.html) includes baseline, candidate and unchanged reference XML; complete solo-only and fixed-backing WAVs; opening excerpts; final independent backing; and exact differences. Rendering uses consistent neutral treatment and constant gains. **No ear-based audition was performed.**
The staged build completed with `--check`: six performance scores, complete solo XML, notation/TAB, playback assets, and independent accompaniment for both current sources. It is under `build/solo_reference_comparison/repair/staged`, not the published asset directory. The exact gate returned exit code 1:
Reparsed exports agree with all four selected event streams. Every TAB position is legal; ties retain position. Harmonic validation reports no unresolved treatments. All 32 completed-candidate totals equal a fresh canonical evaluation (`asset-verification.json`, `evaluation-recheck.json`). The mismatch is in composition/search/selection, not export.
| Output | Generated / target attacks | Exactly matching attacks | Differing onset positions | Exact result |
|---|---:|---:|---:|---|
| All of Me acoustic | 118 / 137 | 2 | 189 | Fail |
| All of Me electric | 128 / 141 | 0 | 232 | Fail |
| Autumn Leaves acoustic | 106 / 121 | 1 | 177 | Fail |
| Autumn Leaves electric | 143 / 115 | 5 | 195 | Fail |
## Failure diagnosis
Rests differ in every case. These results are not close reproduction, and attack counts are not a substitute for matching the requested music. The full comparison page is `build/solo_reference_comparison/repair/comparison/index.html`. It includes untouched references, the baseline and staged XML, complete solo-only and fixed-backing WAVs, opening excerpts, and exact note differences. Rendering used one neutral treatment and constant shared gains; no ear-based audition was performed.
All four targets are playable on strings 1–6, frets 1–12 without open strings under the confirmed guitar-written convention. All of Me aligns at measure 1; Autumn Leaves at the first Gm7 in measure 2, retaining the preceding measure at negative form-relative time. Sources and references are unchanged.
The actual selected events and TAB were checked against all four reparsed exports: all agree. Thus these discrepancies arise in composition/selection, not from an exporter shifting the selected melody. Source vocal and electric head documents are unchanged from the baseline. Accompaniment documents changed with the shared difficulty configuration and the source-derived participation allocation; they are still independently generated. Source and reference SHA-256 values, and the previously published solo exports, remain unchanged. Evidence: `repair/asset-verification.json`.
Stateful constrained derivation reaches all four complete streams with valid harmonic contracts and zero diagnostic history cuts. This demonstrates coverage only. The ordinary first successor cutoff drops every whole-action-compatible target opening:
The fitting trial was stopped after **40 completed passes of its configured 200-pass maximum**, without convergence. Every pass still had four incorrect rollouts; the best had only eight matching prefix attacks in total across the four cases. This is an interrupted diagnostic trial, not a completed 200-pass result and not a proof that every shared model is infeasible. Its best coefficients remain development-only under `repair/fitting`; none were copied to production data.
| Case | Proposed actions | Exact compatible openings | Retained |
|---|---:|---:|---:|
| All of Me acoustic | 9,853 | 1 | 0 |
| All of Me electric | 9,853 | 2 | 0 |
| Autumn Leaves acoustic | 8,492 | 2 | 0 |
| Autumn Leaves electric | 8,492 | 9 | 0 |
A further normal-production check of that best checkpoint completed All of Me acoustic: **5 matching attacks, 223 differing onset positions, and different rests**; it also failed the exact gate. The other fitted-model jobs were interrupted without completed exports. This is not a four-case fitted-model release test. Its completed XML and comparison are in `repair/fitted` and `repair/fitted-comparison`; the interruption is recorded in `repair/fitted-build-status.json`. The complete four-case results above use the unfitted production defaults.
Evidence: `exact-opening-pruning.json`. An earlier clipped-prefix diagnostic counted a shortened Autumn acoustic hold as surviving; `opening-pruning.json` records that weaker historical observation. The observer now checks complete committed events, with a regression preventing this mistake. It never supplies candidates or changes scores.
The default selection trace explains an important failure. All of Me acoustic selected 29 arpeggio actions and six returns; electric selected 32 scalar actions, nine returns and one ordinary tone. No standalone rest won in either output. Many legal expressive candidates were proposed and rejected by score. The role's action-kind preferences overwhelm much of the vocabulary, and the local policy has no complete-phrase destination comparison. Adding legal actions has not repaired that selection limitation.
Final ranking is also insufficient. Complete targets would lose under default weights even if retained:
### Commands actually validated
| Case | Selected total | Complete target total |
|---|---:|---:|
| All of Me acoustic | −2787/64 | 945/64 |
| All of Me electric | −4551/128 | 1287/128 |
| Autumn Leaves acoustic | −1420/33 | 14/11 |
| Autumn Leaves electric | −420/11 | 239/22 |
All commands use `build/build_common/python/bin/python3 build/build_tools/python_runner.py build/build_common/modulus` as their prefix. Exact invocations are in [commands.md](commands.md).
Lower wins. `evaluation-diagnosis-all.json` records component differences. Source interval-pair resemblance, directed motion, register cost and duration preferences still favor continuous movement. The current features do not establish the longer ordered relationships needed to specify these authored tunes. This is not a proof that every generic model must fail.
- `-m unittest discover -s tests -p 'test_*.py'`: **446 tests passed in 348.905 seconds** (`repair/verified-tests.log`).
- `-m unittest tests.test_solo_comparison`: **9 tests passed in 0.083 seconds** after removing an invalid optional report link (`repair/comparison-tests.log`).
- `-m audition.dependency_check --output .../dependency-final`: passed all six roles, including an operational electric register change that changed that role's document and left the other roles intact.
- Full staged `-m generator ... --check --jobs 2 --composition-jobs 2 --export-solo-xml`: passed. The first attempt exposed an unfillable final quarter-beat; a tempo-gated sixteenth note/rest primitive and a regression test repaired that failure before the successful build.
- `-m audition.solo_compare ... --require-exact`: failed all four outputs, as shown above. This is the release-blocking musical result, not a passing check.
- Full-score selected-event/TAB verification and source/reference/published-baseline hash checks: passed (`repair/asset-verification.json`).
The source-only four-bar diagnostic exports eight completed alternatives and identifies the automatic winner. Seven first-bar realizations differ, but all share the first four attacks. Their complete events, home identities, contracts, actions, frontier counts and scores are in `completed-phrases/candidates.json`. Eight retained alternatives do not by themselves demonstrate useful opening diversity.
The staged asset run took **430.402 seconds** with two composition workers and warm generic catalog/non-solo caches. Tests and development fitting were running concurrently, so that time is not an isolated speed benchmark. Solo role times were 156.117, 228.292, 182.301 and 174.160 seconds in that run. No cold-generation speedup is claimed from these numbers. The full recorded stage timings and actual read traces are in `repair/build-profile.json`.
## Development learning
After other generation/rendering jobs stopped, `-m audition.benchmark --source data/songs/all-of-me.xml --role acoustic_solo --cache .../performance/cache --output .../performance/cold` took **134.722 seconds** for the role, plus 0.046 seconds for source analysis, with one worker and an empty concrete/catalog cache. Repeating it with `--output .../performance/warm` took **2.068 seconds** with a role-cache hit. Hardware/runtime: 12 reported CPUs, Linux 7.2.3 x86-64, repository Python environment; cProfile disabled. Cold, warm and parallel-full-build documents have the same hash `adcc372315aa10cae8a956cc5002700859c81cdcf4eeaa59b4ae6f8b41161baf`. Evidence: `repair/performance/summary.json` and the two benchmark records.
The prefix perceptron is removed. The replacement forms exact rational inequalities between complete ordinary outputs and complete examples. It learns shared bounded integer coefficients per role. Allowed features are relative musical categories and bounded two/three-condition rules, not song names, hashes, absolute measure indices, event arrays or per-song recipes. New conjunctions require demonstrated feature collisions. Production does not import the solver or read examples.
The requested cold-generation reduction is **not achieved**. Warm memoization avoids recomposition, but the wider action enumeration is still expensive. The historical baseline's different music, algorithm and benchmark conditions do not support a controlled speedup ratio. Candidate construction/evaluation remains the dominant recorded stage; no further beam expansion is justified by these results.
The optional dependency is pinned to `z3-solver==4.13.3.0`. Exact zero/one-coefficient interval enumeration handles sparse cases; integer optimization handles the remainder. Feasibility and optimization have deterministic work limits. Incompatibility or exhaustion yields a diagnosis, not a substituted tune.
- [Active path, reproduced findings and search limits](active_path_audit.md)
- [Data migration and provenance](data_migration.md)
- [Authoritative evaluation and fitting contract](evaluation_contract.md)
- [Capabilities and unimplemented behavior](musical_capability_matrix.md)
- [Independent-input checks](dependency_proof.md)
- [Reproduction and exact-release commands](commands.md)
The first four-example round compared each target with eight saved complete alternatives. It found acoustic `duration/1 = 9` and electric `metric/eighth/1_2 = 15`. These sparse coefficients separate the sampled alternatives; **they are not a learned jazz grammar or evidence of reproduction**. They remain in `structured/round-1/data`, with explicit source/target/artifact hashes and training provenance. Nothing was promoted to production `data/`.
Detailed winning/runner-up contributions, selected note groups and proposal/valid/retained/selected counts are in `build/solo_reference_comparison/repair/decisions.md`. Superseded diagnostic logs are consolidated in `repair/diagnostic-history.zip`; current evidence, the baseline and targets remain intact.
Successive rounds can accumulate full-output counterexamples using `--previous-round`. Source/example identities, evaluator, fixed priors and musical policies must agree; only learned weights may differ. Incompatible histories are rejected and duplicate inequalities removed. Later fitting cannot silently forget earlier failed complete outputs. No target-prefix update is used.
The search is a local action policy, not a global complete-phrase optimizer. Dedicated suspension/blues constructors and two-sided phrase revision are not present in this replacement; validators remain. Source influence and the short realized home theme are limited models of melodic identity. A catalog containing thousands of paths does not mean all those paths currently compete as complete musical ideas. No new held-out source-standard evaluation set was added. Existing synthetic transposition/meter/harmony tests do not establish generalization to an unseen standard or subjective musical quality.
A fresh ordinary build of that proposal completed under `learned-stage`, using four workers and no target arguments. It passed technical checks but failed the exact gate in all four cases:
The earliest demonstrated remaining failure is selection: legal target-compatible actions lose even at the opening, and later action choices collapse toward a few favored families. The next justified investigation is whether a shared context model can distinguish those conflicting choices over complete phrases, before adding more rules, expanding the beam, or running another long fit. The finite trial here does not settle that question. There is no automatic fallback to reference notes or previous output.
| Learned output | Generated / target attacks | Exact matching attacks | Exact result |
|---|---:|---:|---|
| All of Me acoustic | 214 / 137 | 0 | Fail |
| All of Me electric | 244 / 141 | 0 | Fail |
| Autumn Leaves acoustic | 315 / 121 | 0 | Fail |
| Autumn Leaves electric | 280 / 115 | 0 | Fail |
Technical completion, exact target equality and listener preference are separate. No ear-based audition is claimed. The release remains blocked unless all four unrestricted exported comparisons pass; a valid or stylistically plausible mismatch is not substituted for that requirement.
The [learned-model comparison](../../build/solo_reference_comparison/structured/learned-comparison/index.html) contains the complete exports, consistent auditions and exact differences. All 32 saved learned-candidate scores and four selected event/TAB streams passed independent rechecking. All eight complete non-solo role documents remained byte-canonically identical to the default stage despite the changed solo weights (`full-song-role-independence.json`). No inference about musical preference follows from that technical result.
The second fit accumulated **64 complete-output inequalities** from both ordinary builds. It found acoustic `space/after_arrival = -37` and electric `duration/1_4 = 19`. Both acoustic targets are still excluded at the first retrieval cutoff. The two electric openings survive that check, which proves neither full retention nor reproduction. This proposal was not staged or published, and no third full rollout is claimed. The result demonstrates how a sparse fit can separate sampled full outputs through coarse rhythmic statistics without recovering the ordered melody. Repeating the same fit or widening the beam is not a demonstrated remedy. Evidence is in `round-2/training.json`.
Learning explicitly depends on the authored examples. Runtime target-free is **not training independence**. These repeatedly studied examples are not held-out data. Transfer to separate standards has not been demonstrated here and is not substituted for exact reproduction.
## Validation
Commands use `build/build_common/python/bin/python3 build/build_tools/python_runner.py build/build_common/modulus`; [commands.md](commands.md) records arguments.
- `-m unittest discover -s tests -p 'test_*.py'`: **458 run: 456 passed, two optional solver skips, 1,139.453 seconds**. A preceding run had one `N.C.` lookahead error; it was repaired before the full rerun.
- With `PYTHONPATH=build/development_packages`, `-m unittest tests.test_joint_actions tests.test_structured_selection`: **35 passed in 24.256 seconds** (`successor-cache-tests.log`). This covers later exact shortcuts, solver changes, accumulated-round compatibility, strict diagnostic matching and incoming-state cache invalidation. The full suite was not rerun after every performance edit.
- `-m audition.dependency_check --output .../dependency-cached`: passed all six roles alone/cold, reversed/warm, two-process/cold, with invalid targets present/absent, and after an operational electric-only register change. All case hashes match the preceding `dependency-final` and `dependency` runs. Actual reads are recorded.
- Full `-m generator ... --check --composition-jobs 2 --export-solo-xml`: passed for the default stage. The separate learned-data run with `--composition-jobs 4` also passed. Actual read traces contain no reference or other part's concrete output.
- `-m audition.solo_compare ... --require-exact`: failed all four in **both** full builds, preventing a success claim.
- `structured/verify_completed.py`, through the Python wrapper: passed full selected-event, TAB, tie and canonical-score checks for both stages (64 completed candidates total).
- `git diff --check`: passed at the latest review.
The dependency exercise uses a synthetic one-bar source and real catalogs, not four complete-song cold/warm repetitions. [dependency_proof.md](dependency_proof.md) gives hashes and scope.
## Performance and cleanup
Hardware reports Intel Core i7-1355U, 12 logical CPUs, Linux 7.2.3 x86-64. The two-worker default stage took **4,832.443 seconds**: 4,817.592 in performance generation, 1.418 playback compilation and 12.655 engraving. Solo role times were 2,126.676 / 2,711.550 seconds for All of Me and 1,958.730 / 2,101.732 for Autumn Leaves. Other roles took about 0.2–0.5 seconds each. Tests/diagnostics ran concurrently; this is not an isolated benchmark.
This is a substantial regression from the prior one-action policy. Wider comparison is not a generation speedup. A 20-second live sample found retrieval, state advancement and frontier scoring dominant; engraving is not the bottleneck.
Pure-operation caching, incremental evaluation, short-circuit theme equality and direct retrieval costs remove repeated work. All eight four-bar candidates and every frontier were identical across 227.751-, 126.421- and 92.633-second runs with different concurrent loads; these do **not** establish a controlled whole-build speedup. A paired 9,853-action microbenchmark measured median 0.274 seconds with full feature reports versus 0.125 with direct costs, every cost equal. That claim is limited to warm-cache retrieval.
Successor-ranking memoization also preserves all eight candidates and every frontier. Its four-bar run took 154.177 seconds while the four learned workers ran, with 90 cache hits and 645 misses. The different load prohibits interpreting that elapsed time as a cache speedup or slowdown. The cache distinguishes catalog identity, the three incoming pitches, release time, sustained/rest context, pending obligations, weights and budget; complete home-aware evaluation still occurs per history. It removes repeated ranking work without changing search breadth.
The learned four-worker full build took **2,007.666 seconds**, including 1,994 seconds of performance generation and approximately 13 seconds of engraving. Solo role times were 1,708.084 / 1,920.536 seconds for All of Me and 1,989.394 / 1,945.428 for Autumn Leaves. Its music, weights, optimizations, worker count and concurrent load differ from the default run. The shorter wall time cannot be attributed to parallelism alone. Cold iteration remains expensive; no arbitrary performance target has been met or promised.
Default-build workers started before the final performance fixes. `frozen-inputs.json` and `post-freeze-repair.json` preserve that distinction. The no-chord guard does not apply to these sources; equality and export checks cover the shortcuts. The learned build has its own `learned-frozen-inputs.json` and predates only the final successor-cache optimization, recorded in `learned-post-freeze-repair.json`. Neither full run is presented as a cold benchmark of every final code byte.
Incomplete task-local stages and superseded caches totaling about 12.8 MB were removed; `cleanup.json` records paths. References, sources, baseline, completed comparisons and useful verified caches remain. Temporary work stays in the consolidated ignored build directory.
## Remaining boundary
The selector repair and learning mechanism are implemented. **The exact musical objective remains unmet.** No learned parameters or staged assets have been promoted. Independent parts, harmonic/physical safeguards and runtime representation remain intact.
The next bottleneck is specific: complete-phrase discrimination and early retrieval disagree, and the current event features permit degenerate rhythmic policies to beat the examples. More beam width, more unconstrained vocabulary, another prefix fit or hidden target retrieval would not establish the requested solution. Any next model change must face accumulated complete ordinary counterexamples and the four full-output target-free gate.
There is also a narrower theme-construction limitation: `related()` transposes or inverts the entire realized opening through strictly mapped pitches. It does not adapt the opening's expressive contracts. A legal chromatic/color-bearing home therefore need not have a legal generated return under this constructor. All four default outputs selected zero returns/answers. This is a construction/representation limitation, not evidence that the scorer has learned to avoid unmusical returns. Full operation counters and winner/runner-up contributions are in `structured/decisions.md`.
See [active_path_audit.md](active_path_audit.md), [data_migration.md](data_migration.md), [evaluation_contract.md](evaluation_contract.md), and [musical_capability_matrix.md](musical_capability_matrix.md).
+9 -4
View File
@@ -3,19 +3,24 @@
| Behavior | Current status |
|---|---|
| Ordinary scale motion, rests and held chord tones | Enumerable and validated |
| Complete scalar/third-stride groups | Reachable; exact scale indices, whole rhythm groups |
| Heard-theme return and inverted answer | Reachable from actual realization; no required count |
| Complete scalar/scale-third groups | Reachable; exact scale indices, whole rhythm groups |
| Actual chord arpeggios | Successive written basic chord members, distinct from scale thirds |
| Heard-theme return and inverted answer | Constructors and synthetic reachability retained; a long expressive home may have no legal literal adaptation. No required count |
| Approaches, enclosures, prepared chromatic connections | Reachable joint actions; target, time and register validated |
| Anticipation with hold or deliberate reattack | Reachable and separately validated |
| Stable/resolving colors and anticipated colors | Reachable; complete sounding exposure checked |
| Delayed semitone resolution | Pending across actions; exact target and bounded deadline required |
| Prepared suspension and named blues inflection | Validators retained; no dedicated new action constructor yet |
| Optional full head quotation | No new constructor; source influence currently uses ordered interval relationships and rhythm evidence |
| Two-sided revision / phrase-level destination lookahead | Not implemented by the local action policy |
| Multiple complete histories | Active bounded common-time search; controlled locally-cheaper-opening counterfactual passes |
| Home identity | Completed opening candidate retained separately from recent-note retrieval context |
| Two-sided join revision | No edit/rewrite pass in this selector repair |
| All six strings, frets 1–12, no opens | Shared physical domain and whole-line fingering |
| Source-only independent accompaniment | Existing canonical sparse comping retained |
| Exact construction coverage for all four targets | Demonstrated by constrained derivation plus final harmonic validation; not a production winner |
| Exact unrestricted reproduction of all four targets | Requires the separate full-export gate; a fit/derivation alone is insufficient |
| Exact unrestricted reproduction of all four targets | Not achieved; all four lose complete-duration-compatible openings at the first successor cutoff, and the full default exports fail exact comparison |
| Shared development learning | Complete-output constraints, bounded integer coefficients, accumulated compatible counterexamples and limited contextual-rule schema; a first four-example fit separated saved negatives but did not establish reproduction |
| Training-independent knowledge | Not claimed: approved fitting/induction depends explicitly on the examples |
A complete route is indivisible, but many independent single attacks remain available. This flexibility removes former coverage restrictions without proving melodic coherence. Source relationships are richer than an unordered interval set but remain a limited identity model. Register and fingering are separate; TAB legality is not biomechanical certification.