Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions LoopEditor/editorhost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2476,19 +2476,23 @@ bool EditorHost::requestFixRollback(const QString& rollbackId)
return false;
}

// The restored revision and its rolled-back event are already published, so a retention
// failure is reported alongside them rather than hiding the new revision.
const pdf::PDFHistoryRetentionResult retention = history.enforceRetention({}, artifacts);
if (!retention.success)
const QString revision = point->documentRevisionDigest.left(12);
const QString destinationName = QFileInfo(destination).fileName();
if (retention.success)
{
announceDocumentState(tr("The revision was restored, but history retention could not be enforced: %1")
.arg(retention.errorMessage));
return false;
announceDocumentState(tr("Returned to revision %1 as %2.").arg(revision, destinationName));
}
else
{
announceDocumentState(tr("Returned to revision %1 as %2, but history retention could not be enforced: %3")
.arg(revision, destinationName, retention.errorMessage));
}

announceDocumentState(tr("Returned to revision %1 as %2.")
.arg(point->documentRevisionDigest.left(12), QFileInfo(destination).fileName()));
openFileUrl(QUrl::fromLocalFile(destination));
refreshFixRollbackPoints();
return true;
return retention.success;
}

void EditorHost::discardActionListPlan()
Expand Down
7 changes: 4 additions & 3 deletions LoopLibCore/sources/preflightengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -917,9 +917,10 @@ QJsonObject preflightCoverageScopeFor(const PreflightProfileData& profile)
}
}
return QJsonObject{
{ QStringLiteral("claim"), QStringLiteral("This run does not evaluate formal GWG 2022/2024 conformance for "
"sheetfed-offset or packaging. A clean result covers only its "
"enabled checks, not either family certificate.") },
{ QStringLiteral("claim"), QStringLiteral("Loop does not claim formal GWG conformance. This run does not "
"evaluate GWG 2022/2024 certificate requirements for "
"sheetfed-offset or packaging; a clean result covers only its "
"enabled checks.") },
{ QStringLiteral("matrix_id"), QStringLiteral("loop-gwg-pdfx-v1") },
{ QStringLiteral("enabled_checks"), checkIds }
};
Expand Down
20 changes: 11 additions & 9 deletions PdfTool/pdftoolrepair.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -806,15 +806,6 @@ PDFToolExitCode PDFToolRepair::execute(const PDFToolOptions& options)
return PDFToolExitCode::ProcessingFailure;
}

const pdf::PDFHistoryRetentionResult retention = operationHistory.enforceRetention({}, historyArtifacts);
if (!retention.success)
{
reportDiagnostic(options, PDFToolDiagnosticSeverity::Error, QStringLiteral("history.retention-failed"),
QStringLiteral("The repair history was recorded, but retention could not be enforced: %1")
.arg(retention.errorMessage));
return PDFToolExitCode::ProcessingFailure;
}

if (!options.repairReportFile.isEmpty())
{
QString reportError;
Expand All @@ -841,6 +832,17 @@ PDFToolExitCode PDFToolRepair::execute(const PDFToolOptions& options)
{
PDFConsole::writeText(QString::fromUtf8(QJsonDocument(reportJson).toJson(QJsonDocument::Indented)), options.outputCodec);
}

// Retention runs after the accepted output is fully reported so a retention failure
// cannot suppress the repair report or output registration.
const pdf::PDFHistoryRetentionResult retention = operationHistory.enforceRetention({}, historyArtifacts);
if (!retention.success)
{
reportDiagnostic(options, PDFToolDiagnosticSeverity::Error, QStringLiteral("history.retention-failed"),
QStringLiteral("The repair history was recorded, but retention could not be enforced: %1")
.arg(retention.errorMessage));
return PDFToolExitCode::ProcessingFailure;
}
return PDFToolExitCode::Success;
}

Expand Down
17 changes: 17 additions & 0 deletions changes/cc-code-review-ebc857.evidence.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
format_version: 1
kind: evidence
claims:
- id: retention-failure-keeps-published-output
evidence:
- unit:agent-policy:pdftool
- unit:agent-policy:pagemaster
- unit:agent-policy:quick
- id: core-coverage-claim
evidence:
- unit:agent-policy:core
- architecture:docs/generated/architecture-catalog.json
- security:scripts/ci/check_source_integrity.py
- differential:UnitTestsConversionOracle
unresolved:
- core:scripts/ci/check_independent_validation_gate.py
- Focused Qt builds and tests (UnitTestsEditorHost, UnitTestsRepairOperatorAcceptance, UnitTestsPreflightEngine) require a configured build directory; this worktree has none.
4 changes: 4 additions & 0 deletions changes/cc-code-review-ebc857.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Category: fixed
Audience: users managing PDF operation history and reading preflight reports
Breaking-Change: no
Summary: Keep the restored revision open and the repair report written when history retention fails after an accepted rollback or repair, and restore the general "no formal GWG conformance" statement in every preflight report's coverage claim.
Loading