Correct acoustic graph proprioception direction

This commit is contained in:
Meta Vens 2026-05-29 15:49:22 +01:00
commit d335d30e98
6 changed files with 188 additions and 128 deletions

View file

@ -441,8 +441,8 @@ Cut or replace these before piling on more tuning:
1. Unowned segment contact-loss constant `0.02`.
2. Turbulence/release scalar constants without a named pressure-flow model.
3. Nearest-node source attachment as the only interior source placement model.
4. Any new vocal feature added before the baby-word vowel-body witness in
`docs/acoustic-graph-proprioception.md`.
4. Any new vocal feature added before the primitive-collapse and flow-probe
plan in `docs/acoustic-graph-proprioception.md`.
Cut in the 2026-05-28 N-port pass:

View file

@ -2,162 +2,219 @@
Date: 2026-05-29
The failure is not lack of research. The failure is that research vocabulary
outpaced owner contracts. The graph can name sources, contacts, radiation,
area, losses, branches, and wave clocks, but the baby-word witness still says
the machine does not own an open vowel, a nasal vowel transition, or a shaped
plosive as audible speech.
This pass corrects the direction of the rebuild. The failure is not that the
graph lacks one more utterance target. The failure is that AquaSynth has been
letting a large discrete PT-shaped graph survive as the working body while
adding compensators around it. That is Jenga.
The live objective is to collapse the graph into a small set of physical
modeling primitives, instrument those primitives directly, and compare their
sample/flow behavior against serious reference implementations: especially
VocalTractLab, ArtiSynth, Story/TubeTalker, Smith-style waveguides, and only
then PT/SndKit as a compact stress fixture.
Baby words remain end-to-end witnesses. They are not the rebuild owner.
## Objective
Make AquaSynth's graph voice able to say first words before adding more vocal
machinery. `mama` and `papa` are not toy cases; they are the smallest useful
truth test for vowel body, lip closure/opening, nasal/oral coupling, source
continuity, and radiation color.
Replace the monstrous discrete graph with as few faithful physical primitives
as possible:
- continuous tract geometry and area functions;
- source primitives coupled to tract load;
- branch/coupling primitives;
- radiation/load primitives;
- delay-line propagation and scattering primitives;
- contact/constriction primitives;
- graph instrumentation that exposes wave/sample flow at those owners.
The target is not a better audio golf loop. The target is an acoustic machine
whose internal behavior can be inspected and compared to reference simulators.
## Research Authority Map
### VocalTractLab / Birkholz
Owner lesson: separate anatomy, gestures, vocal-fold/source models, acoustic
simulation, and copy-synthesis controls.
Pressure on Aqua: `tract` should not lower into many little terminal records
that become the de facto anatomy. It should lower into continuous morphology
and explicit primitive controls that a gesture layer can drive and diagnostics
can observe.
### Story / TubeTalker
Owner lesson: continuous area functions and tract length are the compact bridge
between anatomy and acoustics. Formants are derived evidence.
Pressure on Aqua: emitted sections, sample delays, and source/contact sample
points are lowering choices. They must not become the authoring truth.
### Julius Smith / Digital Waveguides / Faust Primitives
Owner lesson: bidirectional delay lines, scattering junctions, loss filters,
fractional delay, and passive boundaries are the cheap realtime substrate.
Pressure on Aqua: generated Faust should use compact waveguide and delay
primitives where they preserve the owner contract. If custom emitted scattering
is needed for differentiable controls, it should still look like a small
physical primitive, not hundreds of section-local expressions.
### ArtiSynth / Fels and Lloyd
Owner lesson: body geometry, mechanical contacts, airflow/acoustics, timeline
controls, and diagnostics are separate organs in an integrated simulation.
Pressure on Aqua: instrumentation is not optional. We need probes that observe
geometry, contact state, pressure/flow, wave variables, source load, radiation,
and timeline transitions at the layer where the primitive claims authority.
### Pink Trombone / SndKit
Owner lesson: PT is a compact Kelly-Lochbaum stress case with oral tube, nasal
branch, source injection, obstruction history, and radiation.
Pressure on Aqua: use PT to compare behavior and catch regressions, but do not
let PT's cell grid or utterance sketches become the architecture.
## Current Mechanism
`tract` authoring builds a high-resolution morphology surface:
`tract` authoring still preserves a high-resolution morphology surface through
`VocalTract.Sections` and `AcousticPath.AreaControl`.
- `VocalTract.Sections` owns section/index semantics.
- `AcousticPath.AreaControl` owns live area expressions from tongue,
constriction, lip, and velum controls.
- `tract_motion` parses motor-intent slew and obstruction parameters, but graph
area and delay lowering do not yet own those slew laws.
Generated tract lowering now compacts the Faust graph to:
Generated tract lowering then compacts that morphology into a Faust-sized graph:
- up to ten oral area terminals,
- up to eight moving injection source ports,
- up to four contact terminals,
- up to ten oral area terminals;
- up to eight moving injection source ports;
- up to four contact terminals;
- one lip radiation port and optional nasal branch/radiation.
`FaustExport` lowers the typed graph into bidirectional segment state:
- segment delay and area reflection own propagation,
- sources inject pressure/flow into nodes,
- contact terminals store and release scalar pressure,
- radiation ports read boundary flow and emit output,
- probes observe selected source/contact/radiation internals.
The latest artifact is
`artifacts/parity/pink-trombone-utterance-logmel/20260529T141822464`.
It improved the `papa` drum-hit failure after lip radiation started following
live lip opening, but `mama` still reads as closed-mouth humming and
`thrombosis` remains mostly absent.
That was a necessary compile-pressure cut, but it is still a discrete
approximation pretending to be the machine. Source placement, contacts, area
sampling, and radiation are represented as records distributed over a generated
graph rather than as a small set of reusable physical primitives with explicit
instrumentation.
## Invariants
- Typed `AcousticPortNetwork` is the only vocal audio authority. Do not restore
the old proxy tract renderer.
- Declared morphology resolution and compiled Faust graph density are separate
truths. More tract sections must not imply more Faust terminals.
- The mouth has one owner. Lip opening owns path-end geometry and radiation
aperture together.
- Source placement over a compact graph must be continuous enough for moving
articulation. Do not restore one source terminal per tract cell by default.
- Contact state must describe a pressure/flow event in the tract, not an output
click or plosive gain rescue.
- Listening verdicts override proxy metrics. A high cosine that cannot say
`a` is evidence against the witness, not evidence for the voice.
- `AcousticPortNetwork` owns vocal acoustics. The old proxy renderer stays dead.
- Continuous morphology owns tract shape and length. Generated section/terminal
count is backend approximation, not anatomy.
- Faust output must be compact and inspectable enough to compile, probe, and
compare.
- Primitives must state what physical quantity they own: area, pressure, flow,
wave variable, delay, coupling, contact, source load, or radiation.
- Instrumentation must observe primitive internals, not only final audio or
final metrics.
- PT utterances are witnesses after the primitive behavior is legible, not the
steering authority.
## Jenga Findings
### Research Names Outpaced Owner Tests
### The Discrete Graph Is Still Too Much Body
The code has acquired real terms from the literature: source impedance, contact
pressure, radiation load, fractional delay, area scattering. Those names are
useful only when each has a falsifiable owner test. Right now the graph can
pass structural checks while failing the smallest speech task.
The graph was reduced enough for Faust to compile, but its shape is still
section-bank driven: area terminals, source terminals, contact terminals, and
node-local expressions. This keeps pushing us toward local fixes because every
generated component looks like a place to add one more rule.
### The Model Has Too Many Local Truths
### We Need Primitive Flow Probes, Not Just Audio Reports
Source, contact, area, loss, radiation, and output balance each implement part
of a pressure/flow story. They are not all wrong, but they can each be locally
reasonable while the whole graph says "buzz", "hum", or silence. The lip
radiation bug was the clean example: path geometry knew the mouth opened, while
radiation aperture did not.
Current probes can show selected source/contact/radiation values, but they do
not yet provide a full primitive timeline: incoming/outgoing wave variables,
segment delay states, scattering inputs/outputs, source load pressure/flow,
contact opening/pressure, branch admittance, and radiation impedance over time.
### The Vowel Body Has No Gate
Without that, comparing to VTL/ArtiSynth/PT is mostly listening plus aggregate
spectral evidence. That is not enough.
The current parity lane can render utterance WAVs and report log-mel,
articulation, band ratios, and silence mismatch. It does not yet have a hard
vowel-body gate that says: before plosives, before fricatives, before
`thrombosis`, the compact graph must sustain an open `a` and a nasal/open
`ma` transition with audible oral vowel body.
### Motion And Contact Are In The Wrong Shape
That missing gate let complexity accumulate around the wrong failure surface.
`tract_motion` parses gesture intent, but graph area/delay lowering does not
own motion/passivity as a primitive. Contact release exists, but it is still a
scalar reservoir pulse instead of a contact/constriction flow primitive that
can be inspected as pressure, opening, resistance, and released flow.
### Discrete Components Are Carrying Continuous Work
### Faust Compile Pressure Is Architectural Evidence
The compacting pass fixed the worst Faust compile pressure, but the graph still
uses sparse banks of area terminals, source ports, and contact terminals as a
compiled approximation of continuous articulation. That may be acceptable as a
backend lowering choice, but the source/contact laws must become continuous
heuristics over that compact bank. Adding density is the expensive answer and
already proved toxic.
When Faust refuses to compile or becomes slow enough that three toy utterances
are painful, that is not tooling bad luck. It means the lowering is asking
Faust to carry too many discrete local expressions. The correct response is to
collapse into primitives, not to tune around the generated graph.
### Contact Release Is Not Yet Speech Mechanics
## Primitive Collapse Plan
Graph contact release now reaches lip radiation. That was a real ownership cut.
It is still a scalar closure/reservoir/release pulse, with directional weights
and decay constants. A baby's `p` is a constrained-flow history through a
changing tract aperture, not a drum trigger. The latest `papa` improvement came
from fixing mouth ownership, not from adding release force.
### 1. Define The Minimal Primitive Set
### Motion Is Authored Outside The Acoustic Owner
Create or document the target primitives before adding another acoustic law:
`tract_motion` exists, and fixture curves smooth controls, but graph area and
delay semantics do not own motor smoothing/passivity. Abrupt morphology changes
can still enter fractional delay and area reflection directly. That leaves
gesture realism outside the organ that emits sound.
- `AreaFunction`: continuous length/area geometry with live deformation.
- `WaveguidePath`: compact bidirectional propagation over that area function.
- `ScatterJunction`: two-port and N-port passive scattering over admittance.
- `SourcePort`: pressure/flow source with load coupling.
- `ConstrictionContact`: opening, resistance, stored pressure, and released
flow.
- `BranchPort`: side-port admittance and coupling.
- `RadiationLoad`: boundary reflection, aperture, impedance, and radiated flow.
- `ProbeTimeline`: dev/test-only sampling of the primitive state above.
### The Probes Do Not Yet Watch The Missing Vowel
If an existing record cannot be mapped onto one of these owners, it should be
deleted, demoted to authoring sugar, or kept only as a compatibility shim that
delegates to a primitive.
Source/contact/radiation probes proved the graph is alive upstream. They do not
yet report a vowel-body witness: formant/body energy, open-mouth radiation
state, nasal/oral balance, and per-phone windows for `mama`/`papa`. We are
observing the machine's organs, but not the baby-word invariant at the layer
where the user hears the failure.
### 2. Compare Primitive Behavior Against References
### Verification Health Is Part Of The Machine
Reference comparison should look at internal behavior, not only waveform
similarity:
The native Faust render path is slow and has needed process cleanup and larger
timeouts. That pressure is not incidental. A graph that takes minutes to render
three toy words and previously overflowed debug compilation is already telling
us the implementation surface is too discrete and too costly.
- VTL/Birkholz: gesture-to-tract/source separation and copy-synthesis control
surfaces.
- ArtiSynth: body/contact/acoustic/timeline diagnostic separation.
- Story/TubeTalker: continuous area-function parameterization and formant
consequences.
- Smith/Faust: delay-line/scatter/loss/radiation primitive economics and
passivity.
- PT/SndKit: compact oral/nasal KL behavior, obstruction history, and radiation
under known fixtures.
### 3. Instrument Sample Flow Through The Graph
Add a dev/test probe path that can write per-block or per-window timelines:
- path area and delay samples;
- incoming/outgoing wave variables at selected scatter sites;
- source load pressure, source flow, and injected wave contribution;
- contact opening/resistance/reservoir/released flow;
- branch admittance and exchanged flow;
- radiation boundary reflection, flow, and emitted output;
- derived energy/passivity checks.
This is the layer that lets us say "the tract behaves like the reference" or
"this primitive is lying" before touching the final utterance.
### 4. Collapse Generated PT Lowering
Generated PT-style tract lowering should become an authoring adapter over the
primitive set. It may preserve PT-shaped controls for fixtures, but it should
not decide the physical model by emitting banks of terminals where a continuous
primitive can own the same behavior.
## Cut Line
Stop adding acoustic features until the graph passes a vowel-body proof.
Cut any new feature whose main evidence is that it improves `mama`, `papa`, or
`thrombosis` without making the primitive flow more legible.
Before the next physics addition, add a focused witness for:
Cut any generated component that cannot explain which primitive owner it
serves.
1. sustained open `a`,
2. `ma` as nasal closure into open vowel,
3. `pa` as lip closure/release into open vowel,
4. the same windows in the accepted utterance artifacts.
The witness should write listening WAVs plus a short report of active vowel
body, speech-band energy, mouth/radiation opening, and nasal/oral balance. It
should fail loudly when the result is closed-mouth humming, a drum hit, or
silence.
Candidate simplifications after that witness exists:
- demote contact release constants into a simpler aperture-shaped constrained
flow primitive, or cut the scalar reservoir if it cannot prove speech value;
- move `tract_motion` slew into graph-owned area/delay expressions;
- replace nearest-node source attachment pressure with a continuous
interpolated injection primitive over adjacent segment nodes;
- use Faust physical-modeling/delay primitives where they collapse generated
graph bulk without hiding owner contracts;
- keep compact generated terminal counts unless a failed witness proves a
specific missing sample point.
Cut any probe that observes final audio while leaving source/load/contact/path
flow hidden.
## Next Work
The next implementation pass should be a baby-word gate, not another graph
feature. Once sustained `a`, `ma`, and `pa` are visibly and audibly wrong or
right, the graph will have a clean target for cuts. Without that gate, every
new coefficient is just another little brick in the stack.
The next implementation pass should map current records and Faust locals onto
the primitive set above, then add the first `ProbeTimeline` witness for one
compact tract. After that, compare the primitive timelines against PT/SndKit
and the VTL/ArtiSynth authority split before further tuning. Words can return
as downstream witnesses once the tract body is observable.

View file

@ -225,3 +225,4 @@
{"date":"2026-05-29","area":"acoustic-graph","summary":"Moving tract injection source placement now uses a raised-cosine kernel over the compact source bank instead of a hard triangular weight. This keeps graph size fixed while making source ownership more continuous and DSP-friendly. The latest accepted utterance diagnostic still fails articulation, but thrombosis moves in the right direction: active ratio 0.1598->0.1826, silence mismatch 0.7811->0.7643, and speech-band ratio 0.2537->0.2704.","evidence":"docs/acoustic-graph-dsp-audit.md; artifacts/parity/pink-trombone-graph-thrombosis-probes/20260529T135910192; artifacts/parity/pink-trombone-utterance-logmel/20260529T140038717"}
{"date":"2026-05-29","area":"acoustic-graph","summary":"Generated lip radiation now mirrors live tract lip opening into the radiation port opening. This fixes split ownership where path-end geometry followed /pink/lip/opening but radiation aperture stayed at its default. Latest accepted utterance artifact improves papa in the exact listening-failure direction: RMS ratio 0.3242->0.8369, cosine 0.7725->0.7996, and motor-band ratio 0.5238->0.0555, reducing the drum-hit plosive signature. Mama and thrombosis still fail, so remaining work is vowel body/radiation color and fricative continuity, not more plosive gain.","evidence":"docs/acoustic-graph-dsp-audit.md; artifacts/parity/pink-trombone-utterance-logmel/20260529T141822464"}
{"date":"2026-05-29","area":"acoustic-graph","summary":"Proprioception pass confirmed the Jenga smell: research vocabulary and named graph components outpaced baby-word owner tests. The live cut line is now to stop adding graph-vocal physics until a focused vowel-body witness proves sustained open `a`, `ma`, and `pa` with listening-aligned reports. The likely missing owners are vowel body/radiation color, graph-owned tract motion, continuous source/contact heuristics over the compact graph, and probes that observe the word-level failure instead of only organ internals.","evidence":"docs/acoustic-graph-proprioception.md; docs/acoustic-graph-dsp-audit.md; artifacts/parity/pink-trombone-utterance-logmel/20260529T141822464"}
{"date":"2026-05-29","area":"acoustic-graph","summary":"Corrected the proprioception cut line after user pushback: baby words are downstream witnesses, not the architecture owner. The live rebuild direction is primitive collapse plus instrumentation: reduce generated graph-vocal lowering to AreaFunction, WaveguidePath, ScatterJunction, SourcePort, ConstrictionContact, BranchPort, RadiationLoad, and ProbeTimeline; compare primitive/sample-flow behavior against VocalTractLab, ArtiSynth, Story/TubeTalker, Smith/Faust, and PT/SndKit before more utterance golf.","evidence":"docs/acoustic-graph-proprioception.md; docs/acoustic-graph-flow-audit.md; research/physical-voice-modeling/PEOPLE.md; research/physical-voice-modeling/talks/TALKS.md"}

View file

@ -91,7 +91,7 @@
"Surge XT for modern hybrid synth modulation",
"Cardinal/VCV-style patches for modular cable/rate semantics"
],
"rule": "For speech, add schema fields and learned-control lanes only when the parity harness has a loss surface that can exercise them. For reference synths, add DSL abstractions only when rebuilds prove the missing invariant. Parsing alone is inventory, not evidence of expressivity. Pink Trombone should be decomposed into reusable low-level Aqua primitives before audio golf, not copied as a bespoke clone or inflated into PT-shaped modules. After the 2026-05-29 proprioception pass, do not add more graph-vocal physics until a baby-word vowel-body witness proves sustained open `a`, `ma`, and `pa`."
"rule": "For speech, add schema fields and learned-control lanes only when the parity harness has a loss surface that can exercise them. For reference synths, add DSL abstractions only when rebuilds prove the missing invariant. Parsing alone is inventory, not evidence of expressivity. Pink Trombone should be decomposed into reusable low-level Aqua primitives before audio golf, not copied as a bespoke clone or inflated into PT-shaped modules. After the 2026-05-29 proprioception correction, collapse graph-vocal lowering into a small set of instrumented physical primitives before more utterance golf."
},
"ipa_vocal_tract_path": {
"status": "This is now the active project center. Roadmap and research notes align the curriculum around structured utterance metadata -> learned utterance embedding -> learned synth automation -> vocal tract/envelope/LFO/filter/spectral controls -> rendered audio loss. The first Core contracts still defend the boundary: PhoneticIntent is the Weksa/language-owned handoff, ArticulatoryPlan is the AquaSynth realization layer, VocalTractMorphology declares anatomy capabilities, ArticulatoryConstraintReport is the host-visible veto surface, and VocalTractPlanResult is the tiny end-to-end proof artifact for host branching. IPA is an authoring input only: tokenization and feature mapping lower into language phonology profiles, timed articulatory gestures, morphology-specific tract/excitation curves, and Faust DSP. The staged support plan starts with tokenization and vowels, then core pulmonic consonants, expanded human IPA, airstream/phonation, and Weksa/alien morphologies. Optional eSpeak NG tests provide the first generated speech workout when ESPEAK_NG or espeak-ng is installed; eSpeak is intelligibility/timing/log-mel pressure, not anatomy truth. AquaSynth owns the learned utterance embedding encoder and synth driver: speech text embeddings plus prosody/emphasis hints plus Ghostlight/Epiphany-shaped character state vectors compress into utterance embeddings, and phonetic features plus that embedding feed a packed-buffer native C# backprop/Adam mapper that predicts tract, AM/FM, LFO, filter, and mel spectral-envelope controls. SpeechBackpropagationPipeline chains the two models: synth-driver target loss returns gradients with respect to its input, slices the utterance-embedding gradient, and updates the utterance encoder from downstream speech loss. The generated ground-truth training fixture renders eSpeak syllables, extracts log-mel evidence, and trains that chained pipeline toward eSpeak-seeded mel/control targets. CultMesh speech training now has payload manifests, peer/lease admission receipts, worker assignment, result collection, and central checkpoint application; workers do not own model updates. Real remote artifact chunk transfer and process supervision remain CultMesh infrastructure surfaces, not AquaSynth workaround territory.",

View file

@ -2,13 +2,15 @@
Current slice:
- Proprioception pass after user called Jenga on the graph voice. Diagnosis is
now durable in `docs/acoustic-graph-proprioception.md`: research vocabulary
and named graph components outpaced baby-word owner tests. Do not add more
graph-vocal physics until a focused vowel-body witness proves sustained open
`a`, `ma`, and `pa` with listening-aligned reports. Next implementation pass
should add that witness, then simplify contact/motion/source placement from
the evidence instead of adding another coefficient.
- Proprioception correction after user rejected baby-word golf as the rebuild
owner. Diagnosis is now durable in
`docs/acoustic-graph-proprioception.md`: collapse generated graph-vocal
lowering into a small set of instrumented physical primitives, compare
primitive/sample-flow behavior against VTL, ArtiSynth, Story/TubeTalker,
Smith/Faust, and PT/SndKit, then return to utterances as downstream
witnesses. Next implementation pass should map current records/Faust locals
onto `AreaFunction`, `WaveguidePath`, `ScatterJunction`, `SourcePort`,
`ConstrictionContact`, `BranchPort`, `RadiationLoad`, and `ProbeTimeline`.
- Implemented the first graph-owned closure reservoir cut. Contact terminals no
longer contribute through the generic node source sum. Ordinary two-port path

View file

@ -133,7 +133,7 @@ live_invariants:
- Generated PT-style `tract` lowering now compacts the Faust graph without changing user-facing morphology resolution: `VocalTract.Sections` and `AcousticPath.AreaFunction.Sections` still preserve the declared tract grid, but generated oral area terminals are capped at 10, generated moving injection source ports at 8, and generated contacts at 4. Source position weighting widens to the compact source spacing so the source bank approximates continuous placement instead of restoring one port per cell. Latest debug evidence `artifacts/parity/pink-trombone-graph-thrombosis-probes/20260529T125048965` drops generated debug DSP size from 1652 to 532 lines, with source graph lines 687->162 and next-state lines 89->27; accepted utterance artifact `artifacts/parity/pink-trombone-utterance-logmel/20260529T125227926` still fails articulation, so this is backend coherence/speed, not parity victory.
- Moving tract injection placement now uses a raised-cosine kernel over the compact source bank instead of a hard triangular source-position weight. Keep this direction: smoother continuous heuristics over fewer generated ports, not more discrete source terminals. Artifact `artifacts/parity/pink-trombone-utterance-logmel/20260529T140038717` still fails articulation but improves thrombosis active ratio/silence/speech-band slightly without increasing graph size.
- Generated lip radiation opening must mirror live tract lip opening. The path-end geometry and radiation aperture are one mouth owner, not separate truths. Artifact `artifacts/parity/pink-trombone-utterance-logmel/20260529T141822464` improves papa's plosive failure sharply (RMS 0.8369, motor-band ratio 0.0555), but mama still sounds vowel-poor and thrombosis is still mostly absent; next pressure is vowel body/radiation color and fricative continuity.
- Proprioception pass says the current speech graph failed by letting research vocabulary outpace baby-word owner tests. Stop adding vocal features until a focused vowel-body witness proves sustained open `a`, `ma`, and `pa` windows against listening-aligned reports. `docs/acoustic-graph-proprioception.md` owns this cut line.
- Proprioception correction says baby words are downstream witnesses, not the rebuild owner. The live cut is to collapse generated graph-vocal lowering into a small set of instrumented physical primitives, compare primitive/sample-flow behavior against VTL, ArtiSynth, Story/TubeTalker, Smith/Faust, and PT/SndKit, then return to utterances once the tract body is observable. `docs/acoustic-graph-proprioception.md` owns this cut line.
- TurbulenceJet now includes a release-timed burst-noise component in addition to the deterministic pressure pulse, but a stronger trial barely moved papa; the source is not the main remaining articulation bottleneck. Graph radiation now mixes 30% raw boundary flow with 70% high-passed flow after local admittance weighting, down from the over-bright 15/85 blend. Latest radiation/source artifact under `artifacts/parity/pink-trombone-utterance-logmel/20260527T174236049`: mama/papa/thrombosis cosine 0.6578/0.7692/0.5585, rmsRatio 3.0006/2.6153/2.3488, articulation 0.1437/0.1173/0.1191. Static `closure-release` under `artifacts/parity/pink-trombone-logmel/20260527T174139661` has rmsRatio 0.9900 and speechBandRatio 0.0842. This is still not speaking; next pressure is true tract resonance/passive scattering and pressure storage, not more burst gain.
- Same-path two-port area discontinuities now emit `graph_area_energy_in_*` and `graph_area_energy_out_*` probes alongside the three-port branch `graph_connection_energy_*` probes. Use these to inspect passivity and formant-body failures at the scatter sites rather than judging only final output loudness.
- `FaustExportOptions.DebugProbeUi` wraps graph probe signals in Faust `vbargraph` UI controls under `/debug/...` without changing audio output arity. Native streaming Faust patches now separate writable controls from read-only probe zones and can read/snapshot probe values after `ProcessBlock`; use this for acoustic graph passivity/radiation inspection, leave it off for normal parity renders.
@ -945,5 +945,5 @@ cut_line:
- "Cut voice-field sprawl when a target needs topology."
- "Cut any design that requires recompiling a patch to move an exposed musical parameter."
- "Split a lower-level graph DSL if Faust/Cardinal-style references make the voice DSL lie."
- "Cut any new graph-vocal feature that lands before the baby-word vowel-body witness can prove open `a`, `ma`, and `pa`."
- "Cut any new graph-vocal feature that lands before primitive-collapse and flow-probe instrumentation make the tract body's sample/flow behavior observable."