Expand UtilitiesCS coverage, fix triage classifier reset, and add Codex Web setup validation#94
Merged
Conversation
Sync main to development
- add a PowerShell test runner that collects Cobertura coverage with dotnet-coverage and vstest.console - configure coverage filtering and post-processing so Koverage can read workspace-relative results reliably - wire the workflow into VS Code tasks and settings and ignore generated coverage artifacts
(test(coverage)): add VS Code MSTest coverage workflow for Koverage
chore: update drm-copilot agents
(chore): change tooling for hierarchical koverage
- add broad MSTest coverage across UtilitiesCS dialogs, email logic, extensions, helpers, outlook-object logic, reusable types, and threading utilities - wire the new test corpus into UtilitiesCS.Test and capture the feature plan, research, baseline evidence, QA audits, and remediation artifacts for the coverage initiative - tighten orchestrator agent guidance so delegated feature review artifacts remain the authoritative completion gate Refs: #65
- update app and test project package references, binding redirects, and import targets to the newer NuGet dependency set - align MSTest-based test projects with the newer testing platform and replace assertions that no longer match the upgraded framework API - add a change plan documenting the upgrade fallout, current findings, and remaining build-recovery steps
Restore solution compatibility after NuGet package upgrades
- route junk-potential setting reads and writes through the current JunkPotential key in AppOlObjects - add regression tests covering junk-potential setting reads and updates - remove legacy OlJunkPotential setting entries and record validation status in the change plan
…ting (fix(junk-potential)): persist selected folder to JunkPotential
…ts phase 1-2 - add mirrored MSTest coverage for attachment, calendar, com, explorer, folder, item, mail, recipient, and store OutlookObjects helpers and wrappers - replace legacy flat OutlookObjects test entries with mirrored compile includes and expand existing recipient/store coverage paths - capture phase 0 baseline artifacts, target-matrix evidence, and verified exclusions for non-live ItemComparer and root MailResolution Refs: #67
- Add mirrored MSTest coverage for Outlook appointment, category, folder, item, and mail-item helpers and wrappers - Replace async enumerable dependency-failure assertions with behavioral coverage and align test-project async package references and binding redirects - Refresh the #67 feature plan into an executor-ready atomic plan for the remaining OutlookObjects coverage work Refs: #67
- add mirrored MSTest coverage for conversation, fields, folders, store, table, and mail-item projection paths - introduce small internal seams in OutlookObjects helpers to exercise null, retry, and COM-safe branches without live Outlook dependencies - relocate coverage evidence into active feature folders and update the feature plan with baseline and QA artifacts
…erage-66 Expand mirrored OutlookObjects coverage with targeted Outlook test seams
- Added method to set the caption - Wired new category calls with captions so that use knows what they are being asked to choose
(chore): Tag Viewer captions
- add SystemThemeDetector and use the Windows AppsUseLightTheme registry value to set AppOlObjects dark mode at startup - register initial SystemThemeDetector tests and capture issue, plan, baseline, and QA evidence for issue #71 - pin a repo-local .NET 8.0.205 SDK with install guidance so dotnet format avoids the host SDK 10.0.200 XMakeElements crash Refs: #71
- Add Install-RepoDotNetSdk.ps1 and test to enable installation - Add global.json to prefer local sdk if exists - Add dotnet local folders to gitignore
Initialize `Sort Email` theme from Windows mode and add repo-local SDK formatting support
Bug/codex web setup not working
- Add MSTest coverage for dialog helpers, classifier groups, WinForms helpers, Outlook table/store/mail helpers, threading utilities, and supporting helper classes - Register the new UtilitiesCS.Test sources and extend ConversationHelper coverage with additional COM and retry-path scenarios - Adjust Triage loaded creation to initialize missing state during test setup and record skip candidates and plan progress for feature 87 Refs: #87
- Correct ConversationHelper filtering and mail-item list behavior for missing columns and forwarded flags - Initialize safe MailItemHelper defaults and recipient matching to avoid null dereferences in serialization and equality paths - Make Outlook table header enumeration and store/controller regression tests work against empty or mocked COM objects Refs: #87
- added task to invoke csharpier to format code - ran csharpier formatting across the repo
- Load triage classifier configuration from the persisted manager key during create and initialize flows - Add a regression test that verifies create-treatment triage initialization reuses the stored ManagerTriage.json config - Extend the VSBuild helper and VS Code tasks to pass analyzer and nullable MSBuild switches, with PowerShell tests covering argument generation
- store each rendered option key on its checkbox and only reconstruct prefixed tags when no original key is available - launch program selection without forcing a program prefix and add a regression test project path that exercises the unprefixed checkbox flow - expand UtilitiesCS coverage for classifier groups, mail item helpers, and store wrapper behaviors while updating the active feature plan evidence - retarget the C# orchestration agent manifests to GPT-5.4
- update UtilitiesCS test cases to satisfy analyzer and nullable gates while preserving MSTest coverage scenarios - align the UtilitiesCS.Test System.Reflection.Metadata reference to the resolved package version used by the final QA build - capture final format, analyzer, nullable, test, and coverage verification evidence in the active feature plan, including the remaining uncovered-file gap - add generated AGENTS.md and CLAUDE.md instruction manifests for the synchronized agent policy set Refs: #87
- add branch-focused MSTest coverage for EmailIntelligence parsers, tokenization, and subject-map behaviors - expand helper and collection coverage across enumerable, filesystem, pretty-print, trace, stack, tree, and wrapper scenarios - add MonoExtension coverage tests, deepen SDIL reader assertions, register the new test file, and reopen the active coverage plan checkpoints Refs: #87
…rage - add MSTest coverage for null-guard, config restoration, copy, and derived-conversion paths - verify emitted Config and backing-field behavior with dynamic type builders across getter-only and missing-getter scenarios - update VS Code workspace recommendations and disable the Copilot CLI session controller in repo settings Refs: #87
- add MSTest coverage for Bayesian classifier groups, Outlook item wrappers, attachment helpers, and observable collection nodes - extend helper and algorithm coverage for Initializer, TraceUtility, DeepCompare, SmithWaterman, and ImageStripper, including current legacy failure paths - register new test files in UtilitiesCS.Test.csproj and update the utilities coverage plan with captured MSTest output Refs: #87
…5-42 Copilot/worktree 2026 03 21T20 45 42
- store `GetUdfValue<T>` intermediate values as `object` so array and scalar UDF values flow through the generic path correctly - add broad regression coverage for property accessor reads, validation mappings, null defaults, bulk setters, and Outlook item overloads
Tests/recipient static
Tests/create category
…three-87 Expand UtilitiesCS coverage, fix triage classifier reset, and add Codex Web setup validation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Expand UtilitiesCS coverage, fix triage classifier reset, and add Codex Web setup validation
Summary
UtilitiesCSsurface and additionalOutlookObjectsslices, with mirroredUtilitiesCS.Testadditions and targeted production hardening where new tests exposed edge cases.Sort Email/ QuickFiler theme from the current Windows mode on first render by introducingUtilitiesCS/HelperClasses/ThemeHelpers/SystemThemeDetector.csand wiringTaskMaster/AppGlobals/AppOlObjects.csto use it..codex/codex-web-setup.sh, along with supporting restore/build/coverage/dev-tool scripts and bundledactionlintassets for reproducible validation..github/and.claude/, including generatedAGENTS.mdandCLAUDE.md, so the repository’s automation and documentation stay aligned with the expanded workflow surface.Why
196of292tracked classes were below the repository’s80%per-file line-coverage floor, including helpers, threading utilities, serialization infrastructure, email intelligence modules, and Outlook-related code. The stated goal is to turn current behavior into executable documentation and reduce regression risk across dependent projects.UtilitiesCS/OutlookObjectsas a high-risk module that mixes deterministic helper logic with Outlook COM interop, WinForms prompts, filesystem access, reflection wrappers, and lazy-loading behavior. The planned response is mirrored tests, explicitUtilitiesCS.Test.csprojwiring, per-file coverage evidence, and explicit blocker documentation rather than silent gaps.UtilitiesCS/OutlookObjects/Folder, with minimal seams only where UI/filesystem coupling blocks testability.Triage.CreateNewTriageClassifierGroupAsync()could serialize an emptyBayesianClassifierGroup, causing later triage validation to fail,CreateAsync()to return null, and downstream runtime paths such asTriage Set Ato hitSystem.NullReferenceException..codex/codex-web-setup.shon Linux and verifies the expected failure-mode harness withactionlint.What Changed
Core behavior / architecture
UtilitiesCS/HelperClasses/ThemeHelpers/SystemThemeDetector.csand switched QuickFiler theme initialization inTaskMaster/AppGlobals/AppOlObjects.csto system-theme detection.UtilitiesCS/EmailIntelligence/ClassifierGroups/Triage/Triage.cs, with related startup/runtime hardening reflected in the modified TaskMaster app-global surfaces..github/workflows/codex-web-setup-test.ymlplus.codex/codex-web-setup.shsupport assets and script updates underscripts/vscode/andscripts/dev-tools/.Tooling / automation / CI / DevEx
scripts/vscode/Invoke-MSTestWithCoverage*.ps1,scripts/vscode/Invoke-Restore.ps1,scripts/vscode/Install-RepoDotNetSdk.ps1, andscripts/vscode/Sync-PackageReferences.ps1..github/workflows/ci.yml,.vscode/tasks.json,.vscode/settings.json,.vscode/extensions.json,Directory.Build.targets,global.json, anddotnet-tools.jsonto support the repo-local .NET/tooling flow.actionlint-bin/and addedscripts/dev-tools/run-actionlint.ps1so workflow validation is available inside the repo.Tests
UtilitiesCS.Test, including substantial new coverage forDialogs,EmailIntelligence,Extensions,HelperClasses,NewtonsoftHelpers,ReusableTypeClasses,Threading, andOutlookObjects.AppointmentItem,Attachment,Category,Conversation,Fields,Folder,Item,MailItem,Recipient,Store, andTable, with the folder slice explicitly targeting every compiled production file in scope.UtilitiesCS.Test/EmailIntelligence/ClassifierGroups/Triage/TriageCreationTests.cs.UtilitiesCS.Test/UtilitiesCS.Test.csprojso new test files are included in the build.Docs / templates / agents
.claude/commands/*,.claude/skills/*, and refreshed.github/agents/*,.github/skills/*, prompts, and instruction files.AGENTS.mdandCLAUDE.mdand updated active feature folders, plans, audits, specs, user stories, and evidence artifacts across issues#65,#67,#71,#79,#82,#87, and#88.Architecture / How It Fits Together
UtilitiesCSremains the shared logic layer for helpers, serialization, email intelligence, threading, and Outlook-related wrappers;TaskMaster,QuickFiler,Tags, and related projects consume those behaviors.UtilitiesCS.Testmirrors production folder structure so coverage additions stay aligned with the implementation surface. The explicit<Compile Include=...>model inUtilitiesCS.Test.csprojis part of the execution path, not just documentation..github/workflows/scripts/vscode/andscripts/dev-tools/global.json,dotnet-tools.json, and bundledactionlintassetsdocs/features/active/...issue/spec/plan/evidence files, which tie each coverage slice or bug fix to its acceptance criteria, QA artifacts, and any documented exclusions or blocked branches.Verification
Completed
docs/features/active/2026-03-19-utilities-coverage-part-three-87/evidence/qa-gates/final-qa-format.mdrecords:csharpier .EXIT_CODE: 0docs/features/active/2026-03-19-utilities-coverage-part-three-87/evidence/qa-gates/final-qa-analyzer-build.mdrecords:msbuild TaskMaster.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=trueEXIT_CODE: 0docs/features/active/2026-03-19-utilities-coverage-part-three-87/evidence/qa-gates/final-qa-nullable-build.mdrecords:msbuild TaskMaster.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=trueEXIT_CODE: 0docs/features/active/2026-03-19-utilities-coverage-part-three-87/evidence/qa-gates/final-qa-test-coverage.mdrecords:vstest.console.exe <all-test-assemblies> /EnableCodeCoverage /InIsolation /Logger:trxEXIT_CODE: 0docs/features/active/2026-03-19-utilities-coverage-part-three-87/evidence/qa-gates/final-coverage-verification.mdrecords a non-green final coverage gate:coverage/coverage.cobertura.xml, baseline coverage, and skip candidatesEXIT_CODE: 1#89records focused triage verification:UtilitiesCS.Test.dll /Tests:CreateClassifier_ReturnsGroupWithClassifiersABC,CreateClassifier_ReturnsGroupWithNonNullSharedTokenBase /InIsolationEXIT_CODE: 02tests executed,2passed,0failedin_progress.Recommended
pwsh -NoProfile -ExecutionPolicy Bypass -File scripts/vscode/Invoke-Restore.ps1 -SolutionPath TaskMaster.sln -Configuration Debug -Platform "Any CPU"dotnet tool run csharpier format .pwsh -NoProfile -ExecutionPolicy Bypass -File scripts/vscode/Invoke-VSBuild.ps1 -SolutionPath TaskMaster.sln -Configuration Debug -Platform "Any CPU" -EnableNETAnalyzers -EnforceCodeStyleInBuildpwsh -NoProfile -ExecutionPolicy Bypass -File scripts/vscode/Invoke-VSBuild.ps1 -SolutionPath TaskMaster.sln -Configuration Debug -Platform "Any CPU" -EnableNullable -TreatWarningsAsErrorspwsh -NoProfile -ExecutionPolicy Bypass -File scripts/vscode/Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debugpwsh -NoProfile -ExecutionPolicy Bypass -File scripts/dev-tools/run-actionlint.ps1Backward Compatibility / Migration Notes
SystemThemeDetector; this replaces reliance on the prior_darkModefield initializer behavior inAppOlObjects.UtilitiesCS.Test.csprojregistration; the mirrored test layout is only effective when those compile includes are maintained.Risks and Mitigations
1283files changed;128152insertions /21320deletions) and aggregates many merged PRs.#87UtilitiesCS coverage objective is advanced substantially but not fully verified green because the final coverage verification artifact recordedEXIT_CODE: 1.#87as follow-up work rather than closure; reviewskip-candidates.mdand the final coverage artifact before declaring the coverage campaign complete.packages.configtooling remains environment-sensitive.in_progress, so final workflow status is not yet confirmed in the context..claude/,.github/agents/,.github/skills/,AGENTS.md, andCLAUDE.mdlast as a separate documentation/automation pass.Review Guide
.github/workflows/codex-web-setup-test.yml,.codex/codex-web-setup.sh,scripts/vscode/*,scripts/dev-tools/run-actionlint.ps1, andactionlint-bin/first to understand the new validation/tooling path.UtilitiesCS/HelperClasses/ThemeHelpers/SystemThemeDetector.csTaskMaster/AppGlobals/AppOlObjects.csUtilitiesCS/EmailIntelligence/ClassifierGroups/Triage/Triage.csAppointmentItem,Folder,Item,MailItem,Recipient,Store,Table) and the correspondingUtilitiesCS.Test/OutlookObjects/...additions.UtilitiesCS.Testexpansion acrossDialogs,EmailIntelligence,Extensions,HelperClasses,NewtonsoftHelpers,ReusableTypeClasses, andThreading, together withUtilitiesCS.Test/UtilitiesCS.Test.csproj..claude/*,.github/agents/*,.github/skills/*,AGENTS.md,CLAUDE.md, and the feature-doc/evidence churn underdocs/features/active/*for the final pass, since much of that diff is mechanical or documentation-heavy.Follow-ups
#87, usingdocs/features/active/2026-03-19-utilities-coverage-part-three-87/evidence/other/skip-candidates.mdand the failing final coverage verification artifact as the starting point.GitHub Auto-close
Related issues / PRs
Sort Emailtheme from Windows mode and add repo-local SDK formatting support #75