Problem / Why
Repository-wide C# coverage cannot meaningfully reach the 80% policy floor because a large fraction of first-party production code is bound to the live Outlook COM object model and the WinForms form lifecycle, and cannot be unit-tested without a running Outlook process (prohibited by the unit-test policy). Re-measurement (post-#189, test assemblies excluded) shows production-only coverage of 58.95%, with the gap concentrated in COM/VSTO/WinForms code: TaskVisualization 0.37%, ToDoModel 10.43%, QuickFiler 25.15%, TaskMaster 25.68%. Without a formal exemption, the 80% target is unreachable regardless of test effort, and the metric does not distinguish genuinely-testable code from architecturally-untestable interop code.
Maintainer ratified pursuing this exemption (2026-06-13). Design basis: artifacts/research/2026-06-13-com-vsto-coverage-exemption-design.md.
Proposed Behavior
Formally exempt Outlook-COM / VSTO / WinForms-bound code from the 80% coverage floor, so the remaining genuinely-testable first-party code can be held to a meaningful target, using a two-layer hybrid mechanism:
- Assembly-level exclude for
TaskVisualization (≈0.37% covered, 90-95% COM/WinForms) via coverage.config ModulePaths/Exclude.
- Class-level
[ExcludeFromCodeCoverage] on COM/VSTO/WinForms-bound classes in QuickFiler, TaskMaster, ToDoModel, and Tags, leaving genuinely-testable seams (e.g. ToDoLoader, IDList.GetNextToDoID, KbdActions<>, settings/path helpers, TagController pure-logic methods) NOT exempt.
- Policy documentation updates in
CLAUDE.md and .claude/rules/general-unit-test.md recording the COM/VSTO exemption rationale and the testable-denominator definition.
Acceptance Criteria
Constraints & Risks
- Must not exempt testable seams (would mask real gaps). The exempt/non-exempt boundary is enumerated in the design memo and must be reviewed.
[ExcludeFromCodeCoverage] touches many production .cs files across four assemblies - large change budget; should be phased into reviewable batches.
- Policy-doc edits are authority-level; maintainer has ratified.
- Roadmap increment tests (raising covered code toward target) are a SEPARATE follow-up, not part of this exemption.
Test Conditions
Source
From: docs/features/potential/2026-06-13-com-vsto-coverage-exemption.md
Problem / Why
Repository-wide C# coverage cannot meaningfully reach the 80% policy floor because a large fraction of first-party production code is bound to the live Outlook COM object model and the WinForms form lifecycle, and cannot be unit-tested without a running Outlook process (prohibited by the unit-test policy). Re-measurement (post-#189, test assemblies excluded) shows production-only coverage of 58.95%, with the gap concentrated in COM/VSTO/WinForms code: TaskVisualization 0.37%, ToDoModel 10.43%, QuickFiler 25.15%, TaskMaster 25.68%. Without a formal exemption, the 80% target is unreachable regardless of test effort, and the metric does not distinguish genuinely-testable code from architecturally-untestable interop code.
Maintainer ratified pursuing this exemption (2026-06-13). Design basis:
artifacts/research/2026-06-13-com-vsto-coverage-exemption-design.md.Proposed Behavior
Formally exempt Outlook-COM / VSTO / WinForms-bound code from the 80% coverage floor, so the remaining genuinely-testable first-party code can be held to a meaningful target, using a two-layer hybrid mechanism:
TaskVisualization(≈0.37% covered, 90-95% COM/WinForms) viacoverage.configModulePaths/Exclude.[ExcludeFromCodeCoverage]on COM/VSTO/WinForms-bound classes inQuickFiler,TaskMaster,ToDoModel, andTags, leaving genuinely-testable seams (e.g.ToDoLoader,IDList.GetNextToDoID,KbdActions<>, settings/path helpers,TagControllerpure-logic methods) NOT exempt.CLAUDE.mdand.claude/rules/general-unit-test.mdrecording the COM/VSTO exemption rationale and the testable-denominator definition.Acceptance Criteria
coverage.configexcludes theTaskVisualizationmodule from instrumentation.[ExcludeFromCodeCoverage]applied to the enumerated COM/VSTO/WinForms classes in QuickFiler, TaskMaster, ToDoModel, Tags (per the design memo scope table); no exemption applied to the enumerated testable seams.CLAUDE.mdand.claude/rules/general-unit-test.mdrecord the exemption policy, rationale, and the testable-denominator target.Constraints & Risks
[ExcludeFromCodeCoverage]touches many production.csfiles across four assemblies - large change budget; should be phased into reviewable batches.Test Conditions
Source
From: docs/features/potential/2026-06-13-com-vsto-coverage-exemption.md