Skip to content

fix(pipeline): surface reactive fallback failures and retry them next run - #841

Merged
ddeboer merged 2 commits into
mainfrom
fix/reactive-fallback-swallowed-error
Sep 9, 2026
Merged

fix(pipeline): surface reactive fallback failures and retry them next run#841
ddeboer merged 2 commits into
mainfrom
fix/reactive-fallback-swallowed-error

Conversation

@ddeboer

@ddeboer ddeboer commented Sep 9, 2026

Copy link
Copy Markdown
Member

Fix #804

When the reactive dump fallback imported the dump but then failed before or during the re-run, two things went wrong at once. The error never reached the log, because ConsoleReporter.stageFailed only printed while a spinner was active, and the fallback catch block fires just after the import spinner has finished. And the dataset was recorded failed under the dump’s fingerprint, so a following run in which the endpoint failed probing skipped it as unchanged until the dump itself changed.

Changes

  • @lde/pipeline-console-reporter: stageFailed now prints an error line when no spinner is running, the way importFailed already did. This covers the 'write', 'provenance' and 'reactive-dump-fallback' failures the pipeline reports outside any stage.
  • @lde/pipeline: the dump’s change fingerprint is adopted only after the fallback re-run has succeeded. If runWriter.reset or the re-run throws, or a stage fails against the dump, the record keeps the endpoint’s fingerprint (null), so the dataset is retried on the next run instead of frozen out.
  • Docs: the sparqlWithImportFallback entry in the pipeline reference now states this fingerprint behaviour, including that the stored dump fingerprint only skips a run in which the endpoint fails probing; when the endpoint passes probing, it is tried again first.

Not included

  • The intermittent reset failure in @lde/search-typesense’s in-place dropWrittenThisRun (point 3 of the issue). With the reporter change it will show up in the log on the next occurrence, which is what is needed to diagnose it.
  • The same freeze exists on the primary path: a dump-sourced dataset whose runWriter.flush throws transiently is recorded failed under the dump’s fingerprint. That is pre-existing and deserves its own issue, since the general fix (record infrastructure failures under a null fingerprint, or have shouldReprocess consult status) changes the skip-unchanged contract.

… run

- Print stage failures in the console reporter when no spinner is running, so a writer
  flush, provenance write or reactive-fallback error reported outside a stage leaves a
  trace instead of being dropped
- Adopt the dump’s change fingerprint only after the fallback re-run completes; a throwing
  reset or re-run keeps the endpoint’s fingerprint so the dataset is retried instead of
  frozen out until the dump changes
- Document the fingerprint behaviour of the fallback in the pipeline reference
…st the dump

- Adopt the dump’s fingerprint only when the fallback re-run succeeds; a stage failure
  against the dump is caught inside the re-run rather than thrown, and must not freeze the
  dataset out either
- State in the docs that the stored dump fingerprint only skips a run in which the
  endpoint fails probing
@ddeboer
ddeboer merged commit ac84e7d into main Sep 9, 2026
4 checks passed
@ddeboer
ddeboer deleted the fix/reactive-fallback-swallowed-error branch September 9, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reactive dump fallback imports the dump but never re-runs the stages, and the error is swallowed

1 participant