PostProject 0.5 Ardour pilot evidence¶
The compatibility evidence review selected one additional integration route:
an Ardour resolver pilot. It addresses three gaps left by the maintained shared
production scenario: installed pkg-config discovery, exception-enabled C++
use, and audio-domain media. Shotcut and a raw-C GES shim were not selected.
The pilot is maintained as a patch series against Ardour commit
7968ec504ba8b70e6de5c09d0470264581a5e979. Ardour uses only the installed
header, shared library, and postproject.pc; its build never invokes Cargo.
Integration shape¶
The production is explicit. An existing .pproj is selected before Ardour is
started:
export ARDOUR_POSTPROJECT_PRODUCTION=/show/audio/shared.pproj
ardour /show/audio/mix-session
No environment variable, no discovered package, or the explicit
--no-postproject configure option produces upstream behavior.
sequenceDiagram
participant A as Ardour session
participant P as PostProject production
participant F as Audio files
A->>P: Save source ID, locator, fingerprint, origin
F--xA: Stored filename is missing
A->>P: Resolve org.ardour:source_id
P->>F: Search Ardour audio paths with content verification
alt one verified candidate
P-->>A: Exact absolute replacement
A->>A: Continue normal session load
else no match, duplicate, or error
P-->>A: No replacement
A->>A: Preserve Missing File dialog
end
After a successful session save, regular file-backed audio sources are recorded
with revision origin org.ardour and external identifier
org.ardour:source_id. An asset at the exact current locator may be adopted;
content equality alone never merges assets. During recovery the persisted
source ID identifies the asset without attempting to construct a canonical URI
for a path that no longer exists. One content-verified known locator or one
exact discovered candidate is accepted. Ambiguity has no automatic winner.
The PostProject-specific code is split between a small Ardour boundary and a
host-neutral resolver. Result<T>::value() follows Ardour’s normal exception
style. The boundary catches postproject::Exception and std::exception, logs
the diagnostic, and preserves the existing recovery dialog.
Verification evidence¶
On 2026-10-01 the executable resolver scenario passed locally against the installed native package. It:
compiled the production resolver using flags from
postproject.pc;wrote valid one-second, 48 kHz stereo WAV audio;
recorded it, renamed it, and recovered the new name by content;
introduced a second content-identical file and received no selection;
confirmed the moved path on a later save and recovered it as a verified known locator;
read the
org.ardourrevision origin andorg.ardour:source_idbinding;caught a typed exception from a failed
Result<T>::value()call.
The actual adapter translation unit also compiled against the pinned Ardour
headers in the local source tree. Replaying the exported patch series from the
pin produced the same nested tree. The complete Waf build could not be run in
this Gentoo workspace because its system dependency set lacks Ardour’s
mandatory liblo development package. On 2026-10-01, the
maintained downstream workflow
passed full Arch Linux builds with and without PostProject, the Linux
installed-package resolver scenario, and the macOS installed-package resolver
scenario. The verified pilot revision is 7ec34c2, against PostProject
934b0fe. Waf runs from the pinned source tree with tagged version history and
an explicit C++17 build.
The resolver scenario uses the exact production policy compiled into Ardour, but it is not an interactive application path. Its ABI trace is therefore not added to the compatibility family-to-host matrix. The matrix continues to count only the maintained normal host paths recorded in the generated evidence report.
Limitations¶
Interactive Ardour UI verification has not been performed. Production selection is an environment variable rather than an Ardour preference. Fingerprinting after saves and content search during a synchronous missing-file callback can take noticeable time with large sources or broad search paths. MIDI, silent, playlist, and non-file sources retain upstream behavior.
Waveform peak files remain private caches without a per-output claim, progress, failure, or cancellation lifecycle. The pilot does not present them as managed artifacts or jobs. It likewise makes no inferred recipe claim for bounces, freezes, or consolidated audio.