You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Child F6 of epic #136 owns the QfcFormController partial-class family plus QfcExplorerController
and their interface declarations - 10 compiled files, approximately 1,611 lines in QuickFiler/QuickFiler.csproj. Today this cluster does not meet the per-file 80% line-coverage floor
mandated by issue #136:
QuickFiler/Controllers/QfcExplorerController.cs (323 lines) carries [ExcludeFromCodeCoverage]
and has no tests at all. Per the epic's Shared Design section 1, that attribute is treated as
unratified: the CLAUDE.md COM/VSTO exemption qualifier "without an injectable seam" is a live
obligation, not standing permission, so the attribute must be removed and the file covered through
seam extraction unless F1's ledger ratifies a specific irreducible remainder.
The four QfcFormController.* partials (196 + 399 + 302 + 232 lines) have partial coverage from QuickFiler.Test/Controllers/QfcFormControllerTests.cs and QfcFormControllerSeamTests.cs, but
the event-handler and setup/disposal paths cross the form/viewer boundary and are the least
reachable.
Actual current per-file coverage for each of the ten files is unmeasured; the epic mandates
numeric per-file evidence rather than aggregate assembly coverage.
Two distinct files are both named IQfcFormController.cs - one under Controllers/, one under Interfaces/. The duplication is unexplained and needs a recorded determination.
Proposed Behavior
Raise every testable file in the F6 set to at least 80% line coverage, verified with F1's per-file
coverage harness and recorded as numeric evidence, without changing observable QuickFiler behavior.
Where a path is unreachable from a deterministic unit test, introduce a seam (interface seam first,
then injectable delegate, then adapter) rather than exempting the file. Extend the existing IQfcFormViewer interface rather than inventing a parallel viewer abstraction.
Acceptance Criteria
Every testable file in the F6 set reaches >= 80% line coverage, verified with F1's per-file
harness and recorded as numeric evidence under <FEATURE>/evidence/qa-gates/.
QfcExplorerController.cs has [ExcludeFromCodeCoverage] removed and reaches the floor via
seam extraction, unless F1's ledger ratifies a specific irreducible remainder.
No production file in scope exceeds 500 lines.
Tests use MSTest, Moq, and FluentAssertions; deterministic, isolated, no temporary files, no
external services, no live forms.
Coverage per file spans positive path plus invalid-input, boundary, and error-handling
behavior.
The full C# toolchain passes in final form: csharpier, analyzer build, nullable build,
coverage-enabled vstest.
No behavior change to observable QuickFiler flows.
Constraints & Risks
QfcExplorerController depends on the Outlook Explorer/MAPIFolder interop surface; the form
controller's event handlers and disposal paths cross the form/viewer boundary.
Viewers/QfcFormViewer.cs (the concrete IQfcFormViewer implementation) belongs to sibling F15
and must not be edited. Any required interface growth must be designed so the concrete viewer needs
no edit, or the required edit must be recorded in spec.md as a cross-child contract note.
Controllers/KeyboardHandler.cs belongs to sibling F3 and must not be edited; this controller only
consumes it.
coverage.config and shared build property files belong to F1 and must not be modified here.
Setup and disposal carry state-transition invariants (double-dispose, dispose-before-setup).
Depends on F1 (quickfiler-coverage-ledger, wave 0) for the per-file measurement harness and the
ratified exemption ledger at docs/features/epics/quickfiler-per-file-coverage/coverage-ledger.md.
Test Conditions
Unit coverage areas: form-controller construction/initialization, event-handler dispatch,
action methods, setup and disposal ordering, explorer-controller folder/selection behavior.
State transitions: double-dispose, dispose-before-setup, repeated setup.
Error handling: null and invalid dependencies, viewer callbacks that throw.
Problem / Why
Child F6 of epic #136 owns the
QfcFormControllerpartial-class family plusQfcExplorerControllerand their interface declarations - 10 compiled files, approximately 1,611 lines in
QuickFiler/QuickFiler.csproj. Today this cluster does not meet the per-file 80% line-coverage floormandated by issue #136:
QuickFiler/Controllers/QfcExplorerController.cs(323 lines) carries[ExcludeFromCodeCoverage]and has no tests at all. Per the epic's Shared Design section 1, that attribute is treated as
unratified: the CLAUDE.md COM/VSTO exemption qualifier "without an injectable seam" is a live
obligation, not standing permission, so the attribute must be removed and the file covered through
seam extraction unless F1's ledger ratifies a specific irreducible remainder.
QfcFormController.*partials (196 + 399 + 302 + 232 lines) have partial coverage fromQuickFiler.Test/Controllers/QfcFormControllerTests.csandQfcFormControllerSeamTests.cs, butthe event-handler and setup/disposal paths cross the form/viewer boundary and are the least
reachable.
numeric per-file evidence rather than aggregate assembly coverage.
Two distinct files are both named
IQfcFormController.cs- one underControllers/, one underInterfaces/. The duplication is unexplained and needs a recorded determination.Proposed Behavior
Raise every
testablefile in the F6 set to at least 80% line coverage, verified with F1's per-filecoverage harness and recorded as numeric evidence, without changing observable QuickFiler behavior.
Where a path is unreachable from a deterministic unit test, introduce a seam (interface seam first,
then injectable delegate, then adapter) rather than exempting the file. Extend the existing
IQfcFormViewerinterface rather than inventing a parallel viewer abstraction.Acceptance Criteria
testablefile in the F6 set reaches >= 80% line coverage, verified with F1's per-fileharness and recorded as numeric evidence under
<FEATURE>/evidence/qa-gates/.QfcExplorerController.cshas[ExcludeFromCodeCoverage]removed and reaches the floor viaseam extraction, unless F1's ledger ratifies a specific irreducible remainder.
external services, no live forms.
behavior.
coverage-enabled vstest.
Constraints & Risks
QfcExplorerControllerdepends on the OutlookExplorer/MAPIFolderinterop surface; the formcontroller's event handlers and disposal paths cross the form/viewer boundary.
Viewers/QfcFormViewer.cs(the concreteIQfcFormViewerimplementation) belongs to sibling F15and must not be edited. Any required interface growth must be designed so the concrete viewer needs
no edit, or the required edit must be recorded in
spec.mdas a cross-child contract note.Controllers/KeyboardHandler.csbelongs to sibling F3 and must not be edited; this controller onlyconsumes it.
coverage.configand shared build property files belong to F1 and must not be modified here.quickfiler-coverage-ledger, wave 0) for the per-file measurement harness and theratified exemption ledger at
docs/features/epics/quickfiler-per-file-coverage/coverage-ledger.md.Test Conditions
action methods, setup and disposal ordering, explorer-controller folder/selection behavior.
Source
From: docs/features/potential/2026-08-07-quickfiler-qfc-form-explorer-controller-coverage.md