Skip to content
CAI
Software that uses CAICheck a score

iWorkHelper/oWorkHelper

41.1

Weak · 1 October 2026

9k

lines of production code

VB.NET

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Outlook add-in designed to batch-archive emails and extract data from PDF invoices. It features a robust archiving pipeline that handles file staging, conflict resolution, and configurable naming templates, while supporting OCR integration for text extraction. The tool includes diagnostic utilities and offline testing capabilities to validate parsing logic and registration status independently of the Outlook environment.

Features

Introduce batch archive workflow with progress tracking and cancellation

The Outlook add-in now provides a robust batch archive feature accessible via the 'Archive' button in the ribbon. When triggered, the system performs pre-flight checks (validating configuration, selected emails, and permissions) before launching a non-modal progress window that displays real-time status (total/processed emails, current stage, percentage). Users can cancel the operation at any time; cancellation is handled gracefully at workflow checkpoints, preserving already-archived files while skipping remaining ones. The process includes a concurrency lock to prevent duplicate runs, automatic migration of plaintext secrets to DPAPI encryption if needed, and a final summary dialog detailing successes, failures, and OCR fallbacks. A 'Settings' button is also added to the ribbon for configuring archive folders, naming templates, and OCR options.

(repo-wide) · high confidence

New diagnostic and offline testing tools for iWorkHelper

Added an offline PDF invoice testing tool (OfflineTester) that extracts text via PdfPig, optionally uses Baidu OCR, and validates field parsing, classification, and naming rules without requiring Outlook or email. Also added PowerShell scripts to diagnose the iWorkHelper Outlook add-in registration, including checking registry keys, LoadBehavior, manifest paths, and resiliency status (DisabledItems/CrashingAddinList).

tools · high confidence

Behavioural changes

Application settings and metadata updated for v1.3.0

The project metadata has been updated to version 1.3.0.0, and the application settings have been expanded to support new configuration options. New user-scoped settings include \PreferLocalParse\ and \AutoFallbackToOcr\ to control parsing behavior, along with \BaiduApiKey\, \BaiduSecretKey\, and related URLs for Baidu OCR integration. Additionally, customizable name templates for invoices, trips, and other document types have been added to allow users to define their own file naming conventions.

My Project · high confidence

Architectural refactor of the PDF archiving pipeline

The Core/Archive module has been completely rewritten to replace the previous monolithic logic with a structured, multi-component system. This change introduces a dedicated ArchiveExecutor for safe, atomic file copying (using .partial staging to prevent corruption), an ArchivePlanner to handle path validation and conflict resolution, and a unified ArchiveNamingRule that consolidates previous separate templates into a single configurable template with a built-in fallback for unrecognized files. Additionally, the system now generates detailed, privacy-safe text reports for every batch and implements a robust ExplorerFolderService to correctly activate existing Windows Explorer windows instead of opening duplicates.

Core · high confidence

Dependencies

Add offline testing tool and update NuGet dependencies

The project now includes a new standalone console application, OfflineTester, designed to validate PDF text extraction, local field parsing, and naming rules without requiring Outlook. This tool references the core library files and updates the NuGet package dependencies to Microsoft.Bcl.HashCode 6.0.0, PdfPig 0.1.14, System.Buffers 4.6.0, System.Memory 4.6.0, System.Numerics.Vectors 4.6.0, and System.Runtime.CompilerServices.Unsafe 6.1.0.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 44 → 41 (-3.0)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 46 → 36 (-10.2)
  • Architecture 100 → 99 (-1.2)
  • Maturity 61 → 59 (-1.9)
  • Readiness 23 → 23 (+0.0)
  • Security 100 → 100 (+0.0)

Resolved (14)

  • BatchArchiveWorkflow.Run (cognitive 25) (Core/Workflow/BatchArchiveWorkflow.vb)
  • BatchArchiveWorkflow.Run (cyclomatic 17) (Core/Workflow/BatchArchiveWorkflow.vb)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no licence statement (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (Core/Workflow/BatchArchiveWorkflow.vb)
  • Duplicated block (9 lines × 2) (Core/Ocr/Baidu/BaiduAccessTokenProvider.vb)
  • EmptyCatchBlock (Core/Common/ExplorerFolderService.vb)
  • EmptyCatchBlock (Core/Mail/MailAttachmentReader.vb)
  • EmptyCatchBlock (Core/Recognition/LocalTextInvoiceRecognizer.vb)
  • Hotspot: Core/Common/UserFriendlyMessageProvider.vb (Core/Common/UserFriendlyMessageProvider.vb)
  • Hotspot: Core/Recognition/RecognitionPipeline.vb (Core/Recognition/RecognitionPipeline.vb)
  • Test reliability not included
  • Tests outside the analyzed solution

New (37)

  • BatchArchiveWorkflow.ProcessGroups (cognitive 32) (Core/Workflow/BatchArchiveWorkflow.vb)
  • BatchArchiveWorkflow.ProcessGroups (cyclomatic 18) (Core/Workflow/BatchArchiveWorkflow.vb)
  • Build failed
  • ClassTooLong: OfflineTesterProgram (tools/OfflineTester/Program.vb)
  • ClassTooLong: SelfTestRunner (tools/OfflineTester/Program.vb)
  • CliOptions.Parse (cognitive 33) (tools/OfflineTester/Program.vb)
  • CliOptions.Parse (cyclomatic 36) (tools/OfflineTester/Program.vb)
  • Documentation: no architecture or design documentation (README.md)
  • Duplicated block (11 lines × 2) (Core/Workflow/BatchArchiveWorkflow.vb)
  • EmptyCatchBlock (Core/Archive/ArchiveExecutor.vb)
  • EmptyCatchBlock (Core/Archive/ArchiveExecutor.vb)
  • EmptyCatchBlock (Core/Common/ComRelease.vb)
  • EmptyCatchBlock (Core/Configuration/BaiduXmlConfigStore.vb)
  • EmptyCatchBlock (Core/Logging/AppLogger.vb)
  • EmptyCatchBlock (Core/Recognition/BaiduOcrInvoiceRecognizer.vb)
  • EmptyCatchBlock (Core/Workflow/ArchivePreflightChecker.vb)
  • EmptyCatchBlock (MainRibbon.vb)
  • EmptyCatchBlock (MainRibbon.vb)
  • EmptyCatchBlock (MainRibbon.vb)
  • EmptyCatchBlock (ProgressForm.vb)
  • …and 17 more

Changes since last survey

  • 2 commits — 2 feature/other, 0 fixes

By area

  • (root) — 1 commit
  • Core/Common — 1 commit

Notable commits

  • change: release: v1.2.1
  • change: release: v1.3.0

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

iWorkHelper/oWorkHelper was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6b6b324bc310dc3a2d32be59c8651a9ab45aacd8 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.