4.2 KiB
Independent-input and reproducibility evidence
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.
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.
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.
Command actually run through the repository Python runner:
-m audition.dependency_check --output build/composer_repair/405066e/dependency
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 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. 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.