fix: production defects and observability found by the test suites

- ForceParams: hand-written Default with force_format = -1 (was 0 = U8,
  which pushed the F32 pipeline into the U8 scale path).
- Plugin clip output: write CPU pixels back into the target texture
  instead of the deep clone returned by texture_get_frame.
- Display ICC: probe the Debian/Ubuntu icc-profiles-free path.
- RippleInfo: public constructor and accessors so the ripple command is
  reachable from integration tests.
- MockEngine: record effect-parameter and push-button attempts so the
  params-view routing tests are falsifiable.
- OFX params: log rejected parameter writes instead of discarding them.
- Manager docs: state the synchronous codec-submission contract.
This commit is contained in:
2026-09-22 20:54:03 +08:00
parent f188bc79e7
commit 18abdec423
6 changed files with 191 additions and 25 deletions
+24
View File
@@ -580,6 +580,30 @@ pub struct RippleInfo {
append_gap: bool,
}
impl RippleInfo {
/// Creates a per-block ripple record: `block` is the block whose length
/// the ripple changes, and `append_gap` requests inserting a gap of the
/// movement span ahead of it instead (C++
/// `TrackListRippleToolCommand::RippleInfo{block, append_gap}`).
///
/// Added for the M6 test-coverage pass: without a constructor the
/// integration tests could only build an empty info list, leaving the
/// whole `ripple()` body unreachable (review §M5).
pub fn new(block: NodeRef, append_gap: bool) -> Self {
Self { block, append_gap }
}
/// The block this record targets.
pub fn block(&self) -> &NodeRef {
&self.block
}
/// Whether the ripple inserts a gap instead of resizing the block.
pub fn append_gap(&self) -> bool {
self.append_gap
}
}
/// `TrackListRippleToolCommand` — ripple-tool edit: shift blocks on the listed
/// tracks by `ripple_movement` (timelineundoripple.h).
#[allow(dead_code)] // `track_list` mirrors the C++ member; the per-track info drives the work.