Extended the parser to recognize backup tasks that were skipped/ignored
because a previous backup was still running. These are treated as Warning
status for monitoring purposes.
Changes:
- Extended _ABB_COMPLETED_RE regex to match "genegeerd" (NL) and "skipped"/"ignored" (EN)
- Added "van deze taak" pattern for Dutch phrasing variations
- Added status detection for skipped tasks (Warning with "Skipped" message)
- All existing patterns remain functional (backward compatible)
- Updated changelog
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Extended the parser to recognize DSM update available notifications in addition
to update cancelled and package out-of-date notifications. All variants fall
under same Updates job type for unified monitoring.
Changes:
- Added "new DSM update", "Auto Update has detected", "new version of DSM", "Update & Restore" to detection patterns
- Extended hostname extraction regex to match "detected on HOSTNAME"
- Now recognizes three notification types: update cancelled, packages out-of-date, update available
- All existing patterns remain functional (backward compatible)
- Updated changelog
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Extended the parser to recognize both DSM update cancelled notifications AND
out-of-date package notifications under the same "Updates" job type, as they
can appear together in combined notifications.
Changes:
- Added "Packages on", "out-of-date", "Package Center" to detection patterns
- Extended hostname extraction regex to match "Packages on HOSTNAME" and "running on HOSTNAME"
- Both notification types now fall under same job (backup_type: Updates)
- All existing patterns remain functional (backward compatible)
- Updated changelog
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Extended the parser to recognize more email variants for Synology DSM
automatic update cancelled notifications while maintaining backward
compatibility with existing patterns.
Changes:
- Added "Automatische DSM-update" and "DSM-update op" to detection patterns
- Extended hostname extraction regex to match "DSM-update op HOSTNAME" and "DSM update on HOSTNAME"
- All existing patterns remain functional (backward compatible)
- Updated changelog
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added parser registry entry for Synology DSM automatic update cancelled
notifications. These are informational messages that don't participate in
schedule learning or reporting logic.
Also removed real customer names from parser registry examples to prevent
customer information from being stored in the codebase. Replaced with
generic placeholders like NAS-HOSTNAME, SERVER-HOSTNAME, VM-HOSTNAME.
Changes:
- Added synology_dsm_update parser entry in registry.py (order 236)
- Parser matches on DSM-update/DSM update in subject and automatic/automatische in body
- Returns backup_software: Synology, backup_type: Updates, informational status
- Replaced customer names in NTFS Auditing example (bouter.nl → example.local)
- Replaced customer names in QNAP example (BETSIES-NAS01 → NAS-HOSTNAME)
- Replaced customer names in NAKIVO example (kuiperbv.nl → VM-HOSTNAME)
- Updated changelog
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added dynamic padding adjustment that measures the actual navbar height and
applies it to the main content padding-top. This prevents the navbar from
overlapping page content when it becomes taller on narrow screens.
Changes:
- Removed fixed padding-top: 80px from main content
- Added id="main-content" to main element for JavaScript targeting
- Added JavaScript function that measures navbar.offsetHeight
- Function applies dynamic padding-top with 20px buffer for spacing
- Triggers on: page load, window load, window resize (debounced), navbar collapse toggle
- Includes fallback to 80px if measurement fails
- Updated changelog
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed test emails to use proper Veeam Backup Job format that matches parser
expectations. All test emails now use the same job name "Test-Backup-Job" so
they appear as different runs of the same job, enabling proper status testing.
Changes:
- Switched from multiple backup software to Veeam only for simplicity
- Fixed subject format to: Veeam Backup Job "Test-Backup-Job" finished with Success/WARNING/Failed
- Fixed body format to include: Backup job: Test-Backup-Job
- All 3 emails per set use same job name but different dates
- Added realistic VM objects (VM-APP01, VM-DB01, VM-WEB01) with status details
- Each set shows different failure scenarios for testing
- Updated changelog description
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed from configurable count input to three separate buttons for
success, warning, and error test emails. Each button generates exactly
3 emails with consistent data for reproducible testing.
Changes:
- Updated routes_settings.py to use fixed email sets instead of random data
- Changed route from /settings/test-emails/generate to /settings/test-emails/generate/<status_type>
- Created three predefined email sets (success, warning, error) with fixed content
- Updated settings.html UI to show three separate buttons instead of count input
- Each set contains 3 emails simulating Veeam, Synology, and NAKIVO backups
- Updated changelog with detailed description
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added feature to generate test emails in inbox for testing purposes:
- Simulates backup notifications from Veeam, Synology, and NAKIVO
- Configurable count (1-50 emails)
- Random job names, statuses, and timestamps
- Emails are parser-compatible for testing inbox approval workflow
- Useful for testing orphaned jobs cleanup and other maintenance ops
- Admin-only feature in Settings → Maintenance
Templates include:
- Veeam: Various job statuses with detailed backup info
- Synology: Backup task notifications
- NAKIVO: Job completion reports
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added missing 'message' parameter to _log_admin_event call and
converted details dict to JSON string to match the function signature.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added deletion of mail_objects before deleting mail_messages to
avoid foreign key constraint violation. The mail_objects table
has a foreign key to mail_messages.
Complete deletion order:
1. Clean up auxiliary tables
2. Unlink mails from jobs
3. Delete mail_objects
4. Delete jobs (cascades to runs)
5. Delete mails
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added UPDATE to set mail_messages.job_id = NULL before deleting jobs
to avoid foreign key constraint violation. The mail_messages table
has a foreign key to jobs, so we must unlink them first.
Complete correct order:
1. Clean up auxiliary tables
2. Unlink mails from jobs (SET job_id = NULL)
3. Delete jobs (cascades to runs)
4. Delete mails
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Moved mail deletion to after job deletion to avoid foreign key
constraint violations. The job_runs have a foreign key to
mail_messages, so jobs (and their cascaded runs) must be deleted
first before the mails can be deleted.
Correct order:
1. Clean up auxiliary tables (ticket_job_runs, remark_job_runs, etc)
2. Delete jobs (cascades to runs via ORM)
3. Delete mails (no more foreign key references)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removed 'Delete orphaned jobs' button from maintenance page to
enforce verification workflow. Users must now:
1. Click 'Preview orphaned jobs' to see the list
2. Verify which jobs will be deleted
3. Click 'Delete All' on the preview page
This prevents accidental deletion without verification.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added verification step before deleting orphaned jobs:
- New GET endpoint /settings/jobs/orphaned to preview the list
- Shows detailed table with job name, backup software/type, customer ID,
run count, and email count
- "Preview orphaned jobs" button on maintenance page
- Delete button on preview page shows exact count
- Summary shows total jobs, runs, and emails to be deleted
This allows admins to verify which jobs will be deleted before
taking the destructive action.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added new maintenance option in Settings → Maintenance to delete
jobs that are no longer linked to an existing customer (customer_id
is NULL or customer doesn't exist).
Features:
- Finds all jobs without valid customer link
- Deletes jobs, runs, and related emails permanently
- Cleans up auxiliary tables (ticket_job_runs, remark_job_runs,
scopes, overrides)
- Provides feedback on deleted items count
- Logs action to audit log
Use case: When customers are removed, their jobs and emails should
be completely removed from the database.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed ticket title format from:
[Backupchecks] Customer Name - Job Name - Status
To:
[Backupchecks] Job Name - Status
Customer information is already available in the ticket's company
field, making it redundant in the title and causing unnecessarily
long ticket titles.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Updated both docs/changelog.md and changelog.py with v0.1.24
release notes documenting the Autotask ticket description fix.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
When resolving Autotask tickets via the update_ticket_resolution_safe
function, the description field was not included in the PUT payload,
causing it to be set to NULL by Autotask.
Fixed by adding "description" to the optional_fields list so it is
preserved from the GET response and included in the PUT request.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added .claude/ to gitignore to prevent committing confidential files
like TODO-planka-integration.md which contains Planka API credentials
and environment-specific IDs.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed to clarify that Autotask integration supports MANUAL ticket creation
(not automatic creation on failures). The integration exists and handles:
- Manual ticket creation in Autotask from Run Checks modal
- Synchronization between BackupChecks and Autotask tickets
- Automatic resolution when Autotask tickets are resolved/deleted
Removed incorrect claim about automatic ticket creation on failures.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removed entire "Integration with Autotask" section that incorrectly
described automatic ticket creation for backup failures. This feature
does not exist and is not planned.
Changes:
- Removed section explaining automatic ticket creation in Autotask
- Removed link to Autotask Integration from Next Steps
- Updated changelog with removal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Corrected documentation to accurately reflect that review is done per-JOB
(not per individual run). When marking a job as reviewed, ALL runs within
that job are marked simultaneously and the job disappears from Run Checks.
Changes:
- Run Checks Modal: Removed non-existent "reviewed indicator", clarified
per-job review in Page Layout callout, updated Mark as Reviewed section
to explain all runs for job are marked together, changed bulk review from
"select multiple run checkboxes" to "select multiple job checkboxes",
updated Unmark Reviewed to reflect per-job unmarking, removed incorrect
statement that successful runs are automatically reviewed
- Approving Backups: Updated bulk review section from "runs" to "jobs" for
consistency with per-job review mechanism
- Changelog: Updated with all per-job review fixes
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removed entire 'Complete Workflow Example' section (Day 1-15 scenario)
as the stage-by-stage descriptions (Stage 1-7) are clearer and more
focused. The detailed example was redundant and made the page too long.
The stage descriptions already provide sufficient detail for understanding
the backup review workflow.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Added Success (Override) with blue badge to status indicators list
- Added callout clarifying Daily Jobs is NOT part of daily workflow
- Emphasized Daily Jobs is informational only (view schedules and status)
- Noted Daily Jobs may be deprecated in future version
- Changed link text from 'operational monitoring' to 'informational page'
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed Expected from 'Blue badge' to 'White badge (with border)' to match
actual CSS implementation and be consistent with Daily Jobs page.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed Expected badge from 'Light Blue' to 'White' (with border) to match actual
CSS implementation (background: #fff with border: 2px solid var(--bs-secondary)).
Status indicators now correctly show:
- Green = Success
- Blue = Success (Override)
- Yellow = Warning
- Red = Failed
- Gray = Missed
- White (with border) = Expected
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Corrected workflow based on user feedback:
- ALL runs must be marked as reviewed (including successes with overrides/tickets)
- Run Checks is THE primary daily tool (not Daily Jobs)
- Added blue badge for override-applied runs (not green)
- Goal: completely empty Run Checks page
- Added bulk review functionality for efficiency
- Rewrote Complete Workflow Example to focus on Run Checks
- Daily Jobs may be deprecated (only for viewing schedules)
Changed files:
- approving-backups.html: Stage 6/7 corrections, new workflow example
- daily-jobs.html: Added blue override badge, clarified secondary role
- run-checks-modal.html: Emphasized primary role, added bulk review
- overrides.html: Blue badge instead of green for overrides
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added comprehensive documentation for the Backup Review workflow:
- Daily Jobs View: Schedule inference, status tracking, override/ticket/remark indicators
- Run Checks Modal: Detailed review interface with objects, email content, Autotask info
- Overrides & Exceptions: Global and object-level override rules with match criteria
- Remarks & Tickets: Issue tracking with scopes, filtering, and lifecycle management
- Approving Backups: Complete workflow from email import to review completion
All content based on actual code implementation - no fabricated features.
Progress: 19 of 33 pages complete (58%)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Major corrections to Mail Parsing documentation - removed non-existent features:
Parsers Page Location:
- Fixed: "Parsers" page (separate navigation page), NOT "Settings → Parsers"
- Location corrected throughout document
Parser Information Table:
- REMOVED "Enabled" column (doesn't exist, suggested false capability)
- Added callout: "Read-Only Parser List" - parsers cannot be managed via UI
REMOVED Entire Section: "Enabling and Disabling Parsers"
- This feature DOES NOT EXIST
- Completely fabricated content about enabling/disabling parsers
- Removed all references to checkbox controls
- Removed all instructions about disabling parsers for troubleshooting
Re-parsing Emails:
- Clarified: ONLY "Re-parse all" available (not individual re-parse)
- Updated "When to Re-parse" - all actions done by developer, not users
- Removed "parser was disabled" scenario (impossible)
Custom Parsers Callout:
- Changed from "create one yourself" to "contact support"
- Emphasized: ONLY developer can create parsers
- Removed references to Python development skills
Troubleshooting Sections:
- REMOVED all references to "check if parser is enabled" (impossible)
- REMOVED "disable parser temporarily to test" (impossible)
- Changed to: "contact support with .eml files"
- Fixed all "Settings → Parsers" references to just "Parsers page"
REMOVED: "AI-Powered Parsing" Future Enhancement
- Completely fabricated claim about LLM parsing consideration
- NOT in planning, NOT being considered
- No source for this false information
Best Practices:
- REMOVED "Test new parsers" (users can't add parsers!)
- REMOVED "Keep parsers enabled" (users can't disable them!)
- Added: "Report parsing issues promptly to support"
- Focus on what users CAN do, not fabricated capabilities
All fabricated features removed. Documentation now reflects actual UI.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Critical corrections based on actual UI behavior:
Email Detail Modal Layout:
- Fixed layout description: TWO-COLUMN (not top/middle/bottom)
- Left side: Metadata + action buttons + parsed objects
- Right side: Email body in iframe
- Updated screenshot caption to reflect left/right layout
Action Buttons (Left Side):
- REMOVED "Re-parse" from modal (doesn't exist in modal!)
- Only available buttons: Approve, Delete, Download .eml
- Re-parse is ONLY on inbox page, not in modal
Approving Emails:
- FIXED: Job name is READ-ONLY during approval (cannot be edited!)
- Only customer selection is editable
- Added callout: "Job Name Cannot Be Changed"
- Removed all references to "edit job name" or "adjust job name"
Re-parsing Emails:
- REMOVED "Re-parse Single Email" section (doesn't exist!)
- Only "Re-parse all" available on inbox page
- Added callout: "No Individual Re-parse"
- Workaround: Delete unwanted emails, re-parse all, re-import
Deleting Emails:
- Fixed location: "Deleted Mails" page (Admin only)
- NOT in "Settings → Maintenance"
- It's a separate navigation page
Inbox Filters and Search:
- REMOVED entire section (not in planning, won't be implemented)
- No false expectations about future filtering features
Troubleshooting Unparsed Emails:
- FIXED: Parsers can ONLY be created by BackupChecks developer
- Users CANNOT create custom parsers
- Added warning callout about parser creation
- Instructions: Contact support with .eml samples
Best Practices:
- Removed "Edit job names during approval" (impossible!)
- Added "Verify parsed job names" - contact support if wrong
- Updated to reflect actual capabilities
All corrections ensure documentation matches actual UI behavior.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Critical corrections to Inbox Management documentation:
Overview & Page Layout:
- Clarified: Inbox displays only UNAPPROVED emails
- Added callout: "Inbox Shows Only Unapproved Emails"
- Explained: Approved emails immediately disappear from inbox
- Inbox is a staging area for emails awaiting approval/deletion
Email Detail Modal - Metadata Section:
- REMOVED incorrect fields that don't exist for inbox emails:
* "Customer: If already approved..." (approved emails aren't in inbox!)
* "Approved: Checkmark..." (no checkmark - they disappear when approved!)
- Added list of action buttons (Approve, Re-parse, Delete, Download .eml)
What Happens After Approval:
- Changed "moved out of inbox" to "immediately disappears from inbox"
- Added: Future emails are "automatically approved and linked WITHOUT
appearing in the inbox" - they go directly to operational views
- New callout: "Approved Emails Don't Return" explaining auto-approval flow
Inbox Filters and Search:
- Changed "all imported emails" to "all UNAPPROVED imported emails"
Common Workflows - Setting Up New Customer:
- Updated step 5: "approved emails disappear from inbox"
- Added step 6: Jobs appear in Jobs/Daily Jobs/Run Checks pages
- Updated step 7: Future reports auto-approved, never appear in inbox
This accurately reflects that the inbox is ONLY for unapproved emails.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Corrected Mail Import Setup documentation to accurately reflect UI:
Step 2.3: "Save Settings (Again)" instead of "Save Final Configuration"
- Clarified there is only ONE "Save settings" button on the page
- Same button is clicked TWICE: once after credentials, once after folders
- Added warning callout: "Same Button, Two Steps"
- Emphasized this is the same button from Step 2.1, not a separate button
Future Improvement note updated:
- Specifically mentions clicking same button twice is not obvious
- Suggests possible solutions: separate sections with distinct save buttons,
or visual feedback about which step user is on
This accurately reflects the current UI where a single "Save settings" button
serves double duty, which will be improved in a future version for clarity.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Enhanced Mail Import Setup documentation to clarify configuration workflow:
Step 2.1 (Enter Graph Credentials):
- Added warning callout: Must save credentials FIRST before folder configuration
- Credentials must be saved and page refreshed before Step 2.2 works
Step 2.2 (Configure Mail Folders):
- Added prerequisite: Ensure credentials saved and page refreshed
- Clarified folder browser popup AUTOMATICALLY loads folder structure
- Emphasized: Don't type paths manually - click folders in popup
- Folder browser connects to Microsoft Graph and retrieves folders
- Added callout: Folder browser auto-generates correct path format
- Added note about planned UI improvement for clearer workflow
Step 2.3 (Save Final Configuration):
- Renamed from "Save Settings" to "Save Final Configuration"
- Clarified this is the SECOND save (first was in 2.1)
- Added tip callout explaining two-step save process
- Enhanced error checking list (credentials, folders, access policy)
This clarifies the actual user workflow where credentials enable folder browsing.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>