Skip to content

refactor(db): extract DB_AHEAD payload helper (Sourcery follow-up on #65)#66

Merged
thierryvm merged 1 commit into
mainfrom
fix/v0.3.11-extract-db-ahead-helper
May 11, 2026
Merged

refactor(db): extract DB_AHEAD payload helper (Sourcery follow-up on #65)#66
thierryvm merged 1 commit into
mainfrom
fix/v0.3.11-extract-db-ahead-helper

Conversation

@thierryvm

@thierryvm thierryvm commented May 11, 2026

Copy link
Copy Markdown
Owner

Sourcery feedback on the freshly-merged PR #65

Envisagez d'extraire la logique de find/découpage du payload dans un petit helper (par ex. db::extract_db_ahead_payload(&str) -> Option<&str>) afin que lib.rs et le test de régression partagent une seule implémentation pour localiser et retirer DB_AHEAD_MARKER.

Valid DRY observation: the find-and-slice was duplicated between lib.rs (runtime) and the regression test. A future tweak (trim whitespace, strip a leading colon, normalize encoding) would need both sites updated.

Fix

New pub fn db::extract_db_ahead_payload(err: &str) -> Option<&str>. Returns Some(payload) when the marker is found, None otherwise. lib.rs::setup and the regression test both consume it.

Tests

  • Renamed existing test → db_ahead_payload_extracts_even_when_wrapped. Now exercises the helper end-to-end against 4 wrappings (current, alternative, none, multi-layer).
  • New db_ahead_payload_returns_none_when_marker_absent — verifies the helper does NOT match unrelated errors (sidecar timeout, out-of-disk-space, generic Tauri setup errors, empty string). Negative case prevents STARTUP_BLOCKED.txt from being written for failures it wasn't designed to flag, which would dilute the file's signal.

Rust 207/207 (was 205), clippy + fmt clean.

When to ship

v0.3.10 just shipped (workflow Release in flight). I'll bundle this into the next tag — either as v0.3.11 alongside other small fixes that accumulate, or as a v0.3.10.1 if we want to keep the polish stream tight. No urgency since the previous PR was already shippable; this is pure code-quality DRY.

🤖 Generated with Claude Code

Summary by Sourcery

Extraire un helper partagé pour analyser les payloads d’erreurs DB_AHEAD et l’intégrer dans la gestion du démarrage au runtime ainsi que dans les tests de régression.

Enhancements:

  • Introduire le helper db::extract_db_ahead_payload pour centraliser la détection du marqueur DB_AHEAD et l’extraction du payload dans le module base de données.
  • Mettre à jour la gestion des erreurs au démarrage de l’application pour utiliser le helper partagé d’extraction de payload DB_AHEAD au lieu de la logique de recherche de marqueur en ligne.

Tests:

  • Renommer et étendre le test de régression DB_AHEAD existant afin de valider l’extraction de payload à travers plusieurs formats d’erreurs encapsulées.
  • Ajouter un test de régression négatif garantissant qu’aucun payload DB_AHEAD n’est extrait à partir de messages d’erreur vides ou sans rapport, en maintenant STARTUP_BLOCKED.txt limité au mode de défaillance prévu.
Original summary in English

Summary by Sourcery

Extract a shared helper for parsing DB_AHEAD error payloads and wire it through runtime startup handling and regression tests.

Enhancements:

  • Introduce db::extract_db_ahead_payload helper to centralize DB_AHEAD marker detection and payload extraction in the database module.
  • Update application startup error handling to use the shared DB_AHEAD payload extraction helper instead of inlined marker search logic.

Tests:

  • Rename and extend the existing DB_AHEAD regression test to validate payload extraction across multiple wrapped error formats.
  • Add a negative regression test ensuring no DB_AHEAD payload is extracted from unrelated or empty error messages, keeping STARTUP_BLOCKED.txt limited to the intended failure mode.

PR #65 follow-up. Sourcery flagged the find-and-slice for the
DB_AHEAD payload as duplicated logic between lib.rs and the
regression test. One implementation is better.

- New `pub fn extract_db_ahead_payload(err: &str) -> Option<&str>`
  in `db/mod.rs`. Returns `Some(payload)` when the marker is in
  the string, `None` otherwise. lib.rs and the test now both
  consume this helper.
- Negative-case test added: unrelated errors (sidecar timeout,
  out-of-disk-space, window builder errors, empty string) must
  return None — otherwise STARTUP_BLOCKED.txt would get written
  for unrelated failures and dilute its signal.

Tests: Rust 207/207 (was 205), clippy + fmt clean. Five
db_ahead* tests now cover the helper end-to-end:
- passes on fresh install
- passes when DB matches binary
- blocks when DB has future migration
- extracts even when wrapped
- returns None when marker absent

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented May 11, 2026

Copy link
Copy Markdown

Guide du réviseur

Refactorise la gestion du marqueur DB_AHEAD en extrayant une fonction utilitaire partagée pour analyser la charge utile (payload) à partir des chaînes d'erreur et en mettant à jour à la fois le runtime et les tests pour s'appuyer sur cette implémentation unique, ajoutant ainsi une couverture de régression plus robuste, à la fois positive et négative.

Diagramme de séquence pour l’utilitaire d’extraction de la charge utile DB_AHEAD dans la gestion des erreurs

sequenceDiagram
    participant TauriSetup as Tauri_setup
    participant DbInit as db_init_pool
    participant Extract as db_extract_db_ahead_payload
    participant Notice as write_startup_blocked_notice

    TauriSetup->>DbInit: init_pool()
    DbInit-->>TauriSetup: Err(e) with DB_AHEAD_MARKER

    TauriSetup->>Extract: extract_db_ahead_payload(e)
    alt marker_present
        Extract-->>TauriSetup: Some(payload)
        TauriSetup->>Notice: write_startup_blocked_notice(payload)
    else marker_absent
        Extract-->>TauriSetup: None
        TauriSetup-->>TauriSetup: [no STARTUP_BLOCKED.txt written]
    end
Loading

Modifications au niveau des fichiers

Changement Détails Fichiers
Extract shared helper for parsing DB_AHEAD payload from error messages and use it in runtime setup.
  • Introduire une fonction publique pour trouver le marqueur DB_AHEAD dans une chaîne d’erreur et renvoyer la charge utile (payload) qui suit sous forme d’option.
  • Mettre à jour la documentation/les commentaires sur DB_AHEAD_MARKER pour décrire la nouvelle approche d’extraction basée sur l’utilitaire.
  • Remplacer la logique inline de recherche et découpage (find-and-slice) dans la gestion des erreurs de démarrage de l’application par des appels à la nouvelle fonction utilitaire.
src-tauri/src/db/mod.rs
src-tauri/src/lib.rs
Strengthen regression tests around DB_AHEAD payload extraction, including positive wrapped cases and negative non-marker cases.
  • Renommer et ajuster le test existant pour valider l’extraction de la charge utile via le nouvel utilitaire à travers plusieurs schémas d’encapsulation (wrapping).
  • Ajouter un nouveau test garantissant que l’utilitaire renvoie None pour des erreurs sans rapport et des entrées vides, afin d’éviter la détection de faux positifs de défaillances DB_AHEAD.
src-tauri/src/db/mod.rs

Conseils et commandes

Interaction avec Sourcery

  • Lancer une nouvelle revue : Commentez @sourcery-ai review sur la pull request.
  • Poursuivre les discussions : Répondez directement aux commentaires de revue de Sourcery.
  • Générer un ticket GitHub à partir d’un commentaire de revue : Demandez à Sourcery de créer un
    ticket à partir d’un commentaire de revue en y répondant. Vous pouvez également répondre à un
    commentaire de revue avec @sourcery-ai issue pour créer un ticket à partir de celui-ci.
  • Générer un titre de pull request : Écrivez @sourcery-ai n’importe où dans le
    titre de la pull request pour générer un titre à tout moment. Vous pouvez également commenter
    @sourcery-ai title sur la pull request pour (re)générer le titre à tout moment.
  • Générer un résumé de pull request : Écrivez @sourcery-ai summary n’importe où dans
    le corps de la pull request pour générer un résumé de PR à tout moment, exactement à l’endroit
    souhaité. Vous pouvez également commenter @sourcery-ai summary sur la pull request pour
    (re)générer le résumé à tout moment.
  • Générer le guide du réviseur : Commentez @sourcery-ai guide sur la pull
    request pour (re)générer le guide du réviseur à tout moment.
  • Résoudre tous les commentaires Sourcery : Commentez @sourcery-ai resolve sur la
    pull request pour résoudre tous les commentaires Sourcery. Utile si vous avez déjà
    traité tous les commentaires et ne souhaitez plus les voir.
  • Rejeter toutes les revues Sourcery : Commentez @sourcery-ai dismiss sur la pull
    request pour rejeter toutes les revues Sourcery existantes. Particulièrement utile si vous
    souhaitez repartir de zéro avec une nouvelle revue – n’oubliez pas de commenter
    @sourcery-ai review pour lancer une nouvelle revue !

Personnaliser votre expérience

Accédez à votre tableau de bord pour :

  • Activer ou désactiver des fonctionnalités de revue comme le résumé de pull request
    généré par Sourcery, le guide du réviseur, et d’autres.
  • Changer la langue de revue.
  • Ajouter, supprimer ou modifier des instructions de revue personnalisées.
  • Ajuster d’autres paramètres de revue.

Obtenir de l’aide

Original review guide in English

Reviewer's Guide

Refactors the DB_AHEAD marker handling by extracting a shared helper function to parse the payload from error strings and updating both runtime and tests to rely on this single implementation, adding stronger positive and negative regression coverage.

Sequence diagram for DB_AHEAD payload extraction helper in error handling

sequenceDiagram
    participant TauriSetup as Tauri_setup
    participant DbInit as db_init_pool
    participant Extract as db_extract_db_ahead_payload
    participant Notice as write_startup_blocked_notice

    TauriSetup->>DbInit: init_pool()
    DbInit-->>TauriSetup: Err(e) with DB_AHEAD_MARKER

    TauriSetup->>Extract: extract_db_ahead_payload(e)
    alt marker_present
        Extract-->>TauriSetup: Some(payload)
        TauriSetup->>Notice: write_startup_blocked_notice(payload)
    else marker_absent
        Extract-->>TauriSetup: None
        TauriSetup-->>TauriSetup: [no STARTUP_BLOCKED.txt written]
    end
Loading

File-Level Changes

Change Details Files
Extract shared helper for parsing DB_AHEAD payload from error messages and use it in runtime setup.
  • Introduce public function to find DB_AHEAD marker in an error string and return the trailing payload as an option.
  • Update documentation/comments on DB_AHEAD_MARKER to describe the new helper-based extraction approach.
  • Replace inline find-and-slice logic in application startup error handling with calls to the new helper function.
src-tauri/src/db/mod.rs
src-tauri/src/lib.rs
Strengthen regression tests around DB_AHEAD payload extraction, including positive wrapped cases and negative non-marker cases.
  • Rename and adjust existing test to validate payload extraction via the new helper across multiple wrapping patterns.
  • Add a new test ensuring the helper returns None for unrelated errors and empty inputs, preventing false-positive detection of DB_AHEAD failures.
src-tauri/src/db/mod.rs

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Salut - j'ai passé en revue tes changements et ils sont excellents !


Sourcery est gratuit pour l'open source - si tu apprécies nos revues, merci d'envisager de les partager ✨
Aide-moi à être plus utile ! Merci de cliquer sur 👍 ou 👎 sur chaque commentaire et j'utiliserai ces retours pour améliorer tes revues.
Original comment in English

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@thierryvm thierryvm merged commit 1d295d4 into main May 11, 2026
5 checks passed
@thierryvm thierryvm deleted the fix/v0.3.11-extract-db-ahead-helper branch May 11, 2026 18:57
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.

1 participant