diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 561521b..88f1e68 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -270,3 +270,4 @@ {"timestamp":"2026-06-01T01:05:00+01:00","topic":"per-target-local-music-intelligence","claim":"Each song challenge now emits a provider-labeled `intelligence.md` built from local audio analysis and source-path vocabulary, and musician prompts must read it alongside Qdrant music-production knowledge. The report translates tempo, register, brightness, noisiness, density, spectral motion, and cautious genre hints into AquaSynth production decisions. Keep prompt surfaces free of PowerShell markdown backtick escapes: escaped `r`/`t`/`n` tokens became hidden control characters in agent instructions, corrupting metric and file names.","evidence":"tools/IpaTrialWorker/Program.cs; tools/run-song-snippet-trial-swarm.ps1; artifacts/parity/song-snippet-swarms/20260531T234041397/pass-001/agent-01/target-01/intelligence.md; artifacts/parity/song-snippet-swarms/20260531T234041397/pass-001/agent-01/hypothesis-agent.prompt.md"} {"timestamp":"2026-06-01T01:58:00+01:00","topic":"song-swarm-render-failure-visibility","claim":"Song-swarm render failure must be visible to agents and operators. `song-score` now writes `audio/render-failure.txt` and includes failure summaries in `evaluator-report.md`. The parser accepts documented `env=ad attack=... decay=...` syntax, because the manual taught that form and agents copied it. Codex musician jobs now set repo-local `DOTNET_CLI_HOME`/`NUGET_PACKAGES` with first-time-use disabled so internal renderer `dotnet run` calls do not write to denied sandbox home directories.","evidence":"src/AquaSynth.Core/PatchScript.cs; tests/AquaSynth.Dsl.Tests/PatchScriptTests.cs; tools/IpaTrialWorker/Program.cs; tools/run-song-snippet-trial-swarm.ps1; artifacts/parity/song-render-failure-smoke/20260601T0145-agent01-a01/smoke-agent01-target01-attempt01/song-candidates/agent_01__swarm__a01/audio/render-failure.txt; artifacts/parity/song-render-failure-smoke/20260601T0152-agent01-a01-after-ad/smoke-agent01-target01-attempt01/summary.csv"} {"timestamp":"2026-06-01T02:08:00+01:00","topic":"song-swarm-render-environment-and-syrinx-scaffold","claim":"Renderer builds must not depend on user-profile NuGet or dotnet config. `FaustCompiler.RenderAsync` now runs its temporary C# render project with temp-local HOME, APPDATA, LOCALAPPDATA, DOTNET_CLI_HOME, and NUGET_PACKAGES. The music manual and swarm prompt now treat acoustic/syrinx as complete-graph syntax: agents should start from known-valid syrinx patches or log a gap, not submit isolated `source_port`/`acoustic_network` fragments that cannot render.","evidence":"src/AquaSynth.Faust/FaustCompiler.cs; docs/music-production-knowledge/aqua-dsp-usage-manual.md; tools/run-song-snippet-trial-swarm.ps1; artifacts/parity/song-snippet-swarms/20260601T005553312/pass-001/agent-01/iterations/attempt-01/target-01/agent-01-target-01-attempt-01/song-candidates/agent_01__swarm__scene_a/audio/render-failure.txt"} +{"timestamp":"2026-06-01T02:33:00+01:00","topic":"learned-only-music-knowledge-show-standard","claim":"A cumulative music-production knowledge loop should not fail when `music-distill --learned-only true` omits the seed `music-production-quality-standard-v1` document. The pass-end standard snapshot is display-only: it may show the canonical seed record when present, but if learned-only output only contains current curator/manual/failure/abstraction documents it must write an index-backed pass snapshot and continue the swarm.","evidence":"tools/run-song-snippet-trial-swarm.ps1; artifacts/parity/song-snippet-swarms/20260601T010706781/launcher stderr showed `No music knowledge document found for music-production-quality-standard-v1` after pass-001 despite successful learned-only distillation"} diff --git a/tools/run-song-snippet-trial-swarm.ps1 b/tools/run-song-snippet-trial-swarm.ps1 index 5229a0f..548bd80 100644 --- a/tools/run-song-snippet-trial-swarm.ps1 +++ b/tools/run-song-snippet-trial-swarm.ps1 @@ -247,6 +247,58 @@ function Write-PassPlaylist { Set-Content -LiteralPath $reportPath -Value $report } +function Write-MusicStandardSnapshot { + param( + [string]$StorePath, + [string]$PassDirectory, + [string]$WorkerProject, + [string]$LogPath + ) + + $outputPath = Join-Path $PassDirectory "music-production-quality-standard.md" + try { + Invoke-LoggedProcess ` + -FilePath "dotnet" ` + -ArgumentList @( + "run", + "--project", + $WorkerProject, + "--", + "music-show", + "--store", + $StorePath, + "--knowledge-id", + "music-production-quality-standard-v1", + "--output", + $outputPath + ) ` + -LogPath $LogPath + } + catch { + Add-Content -LiteralPath $LogPath -Value "[$([DateTimeOffset]::UtcNow.ToString("O"))] quality-standard document not present in current learned-only store; wrote pass knowledge snapshot instead." + $reportPath = Join-Path $PassDirectory "music-production-knowledge-report.md" + $indexPath = Join-Path $PassDirectory "music-vector-index-after.md" + $lines = New-Object System.Collections.Generic.List[string] + $lines.Add("# Music Production Quality Standard Snapshot") + $lines.Add("") + $lines.Add("The canonical seed standard was not re-emitted by this learned-only pass. That is expected: pass distillation appends current lessons instead of reseeding manuals and static doctrine.") + $lines.Add("") + $lines.Add(('- store: `{0}`' -f $StorePath)) + $lines.Add(('- distillation report: `{0}`' -f $reportPath)) + $lines.Add(('- vector index: `{0}`' -f $indexPath)) + $lines.Add("") + if (Test-Path -LiteralPath $reportPath) { + $lines.Add("## Current Pass Knowledge Documents") + $lines.Add("") + foreach ($line in (Get-Content -LiteralPath $reportPath | Where-Object { $_ -like '- `*' })) { + $lines.Add($line) + } + } + + Set-Content -LiteralPath $outputPath -Value $lines + } +} + $repoRoot = Resolve-RepoRoot $codex = Get-Command $CodexCommand -ErrorAction Stop $loopId = New-Timestamp @@ -786,21 +838,10 @@ Return a short final note naming knowledge-curation.md. -LogPath (Join-Path $logRoot "$passId-music-index.log") $latestMusicKnowledgeStore = $musicKnowledgeStore - Invoke-LoggedProcess ` - -FilePath "dotnet" ` - -ArgumentList @( - "run", - "--project", - $workerProject, - "--", - "music-show", - "--store", - $musicKnowledgeStore, - "--knowledge-id", - "music-production-quality-standard-v1", - "--output", - (Join-Path $passDir "music-production-quality-standard.md") - ) ` + Write-MusicStandardSnapshot ` + -StorePath $musicKnowledgeStore ` + -PassDirectory $passDir ` + -WorkerProject $workerProject ` -LogPath (Join-Path $logRoot "$passId-music-show-standard.log") }