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.