Restore review-flagged comment content cut too aggressively in comment reduction

This commit is contained in:
2026-07-29 21:15:00 -04:00
parent 9d037fb233
commit 47ccadf726
10 changed files with 36 additions and 18 deletions
+8 -6
View File
@@ -50,9 +50,10 @@ namespace {
// The no-dialog render is the built-in action "File: Render project, using the
// most recent render settings" — command id 42230. Stock main action id, not in
// reaper_plugin_functions.h, confirmed against a running REAPER. Renders
// headlessly using whatever RENDER_* settings are currently on the project —
// why we set them all explicitly first.
// reaper_plugin_functions.h, so it cannot be verified against the SDK header
// (offline capture shipping as the default is the empirical evidence it holds).
// Renders headlessly using whatever RENDER_* settings are currently on the
// project — why we set them all explicitly first.
constexpr int kActionRenderUsingMostRecentSettings = 42230;
// RENDER_BOUNDSFLAG 0 = custom time bounds (we set STARTPOS/ENDPOS ourselves
@@ -275,9 +276,10 @@ CaptureResult OfflineRenderBackend::capture(const CaptureRequest& request) {
// the .rpp location, and is never empty even when unsaved (the original bug —
// captures landed in REAPER's default media location instead of by the .rpp).
//
// Flow: read .rpp path; if empty, Main_SaveProject(proj, true) prompts
// Save-As and blocks until dismissed; re-read; if still empty (cancelled),
// refuse with NoProject and write nothing.
// Flow: read .rpp path; if empty, Main_SaveProject(proj, true) — true =
// forceSaveAsIn — prompts Save-As and (per SDK header) blocks until dismissed,
// though that blocking behaviour cannot be verified from the header itself;
// re-read; if still empty (cancelled), refuse with NoProject and write nothing.
auto readRppPath = [&]() -> std::string {
std::vector<char> buf(4096, '\0');
EnumProjects(-1, buf.data(), static_cast<int>(buf.size()));
+1 -1
View File
@@ -450,7 +450,7 @@ void RunCancelRealtime(ReaSamplerSession& session)
// via InsertMedia, undo-wrapped. `conform` selects the explicit opt-in tempo-match
// variant (never silent — it fires only from the distinct "conform" action). This
// is the INTENDED placement path: it adds items to the arrange on purpose
// (CONTEXT.md §load-bearing principle) and runs only from a user-invoked action.
// (CLAUDE.md §The load-bearing principle) and runs only from a user-invoked action.
void RunInsertSelected(ReaSamplerSession& session, bool conform)
{
InsertRequest req;
+1 -1
View File
@@ -178,7 +178,7 @@ bool deleteOrphanFile(const std::string& absPath, bool& outUsedTrash,
outUsedTrash = true;
return true; // deleted this call -> reclaimed
}
// Distinguish "already absent" (nonzero return on some REAPER versions
// Distinguish "already absent" (nonzero return on some Windows/shell versions
// for a vanished file) from a real failure so the caller can tally separately.
std::error_code ec;
if (!fs::exists(absPath, ec)) {
+5 -3
View File
@@ -7,9 +7,11 @@
//
// classifyProjectTransition (pure, capture_paths) takes a `sameProjectObject`
// bool so the decision stays REAPER-free and testable; poll() executes the
// verdict. REAPER exposes no stable per-project GUID, so we mint one (genGuid/
// guidToString) under kProjExtGuidKey; Save-As copies the whole .rpp including
// our ext state, so the new project initially shares the old GUID, and poll()
// verdict. REAPER exposes no stable per-project GUID (GetSetProjectInfo_String
// has no PROJECT_GUID desc; GetProjectStateChangeCount is a session-local
// counter, not cross-open identity), so we mint one (genGuid/guidToString)
// under kProjExtGuidKey; Save-As copies the whole .rpp including our ext
// state, so the new project initially shares the old GUID, and poll()
// re-GUIDs it after relocating (or on the forked-sibling Load branch).
//
// Division of labour for undo/redo: the identity-transition poll (this file)
+4 -3
View File
@@ -105,9 +105,10 @@ bool fxSubtreeHasInstance(const FxParmGetter& parm, int fxId,
return false;
}
// Real-world FX containers are typically 2-4 levels deep; 32 is unreachable
// in practice while remaining finite. The truncation->protect-all guard above
// is the primary protection even at this depth.
// Raised from 8 to 32 (defense in depth against truncation). Real-world FX
// containers are typically 2-4 levels deep; 32 is unreachable in practice
// while remaining finite. The truncation->protect-all guard above is the
// primary protection even at this depth.
constexpr int kMaxContainerDepth = 32;
std::string trackFxParm(MediaTrack* tr, int fxId, const char* parm) {
+2 -1
View File
@@ -148,7 +148,8 @@ void parkFxOffline(MediaTrack* tr) {
}
}
// Restores per-FX offline from the snapshot, bounds-checked against the live
// Restores per-FX offline from the snapshot verbatim — each slot back to its
// captured value, never a blanket "online" — bounds-checked against the live
// FX count (prune-safe if the chain changed while parked).
//
// HAZARD (open, tracked in docs/TODO.md): this remaps by slot INDEX, not