Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
172 commits
Select commit Hold shift + click to select a range
20d163a
ci(nullable-gate): use /t:Rebuild to stop the nullable gate from sile…
drmoisan Jul 18, 2026
c893fe8
epic(utilitiescs-nullable): add integration manifest and preparation …
drmoisan Jul 19, 2026
5822d3a
docs(363): prepare utilitiescs-nullable-extensions epic child (Wave 0)
drmoisan Jul 19, 2026
e7bad17
docs(364): prepare utilitiescs-nullable-helperclasses epic child (Wav…
drmoisan Jul 19, 2026
f377c85
epic(utilitiescs-nullable): back-fill canary issue numbers #363/#364
drmoisan Jul 19, 2026
a9fb693
docs(370): prepare utilitiescs-nullable-email-parsing epic child (spe…
drmoisan Jul 19, 2026
ca3195a
docs(epic): back-fill issue #370 for utilitiescs-nullable-email-parsing
drmoisan Jul 19, 2026
c967b28
docs(368): prepare utilitiescs-nullable-svgcontrol feature (epic chil…
drmoisan Jul 19, 2026
b8c6859
docs(367): prepare utilitiescs-nullable-newtonsofthelpers feature (sp…
drmoisan Jul 19, 2026
ee9ceb2
docs(366): prepare utilitiescs-nullable-reusabletypes epic child
drmoisan Jul 19, 2026
82a56b6
Merge feature/utilitiescs-nullable-svgcontrol-368 into epic integrati…
drmoisan Jul 19, 2026
c8d1618
docs(epic): back-fill svgcontrol issue_num 9006 -> 368
drmoisan Jul 19, 2026
04b4101
docs(371): prepare utilitiescs-nullable-outlook-mailitem-item feature…
drmoisan Jul 19, 2026
430371a
docs(369): prepare utilitiescs-nullable-threading child feature
drmoisan Jul 19, 2026
365acf4
docs(372): prepare utilitiescs-nullable-email-classifier epic child (…
drmoisan Jul 19, 2026
6a46219
docs(365): prepare utilitiescs-nullable-outlook-folder-store epic chi…
drmoisan Jul 19, 2026
3048dd2
chore(epic): fan in prepared feature utilitiescs-nullable-reusabletyp…
drmoisan Jul 19, 2026
c8ea4f9
chore(epic): fan in prepared feature utilitiescs-nullable-newtonsofth…
drmoisan Jul 19, 2026
068e818
chore(epic): fan in prepared feature utilitiescs-nullable-outlook-mai…
drmoisan Jul 19, 2026
cad76e8
chore(epic): fan in prepared feature utilitiescs-nullable-threading (…
drmoisan Jul 19, 2026
72581a1
docs(epic): back-fill issue numbers for reusabletypes #366, newtonsof…
drmoisan Jul 19, 2026
4ff6d4d
merge(epic): fan in prepared feature utilitiescs-nullable-email-class…
drmoisan Jul 19, 2026
dc43500
merge(epic): fan in prepared feature utilitiescs-nullable-outlook-fol…
drmoisan Jul 19, 2026
523002b
docs(epic): back-fill issue numbers for outlook-folder-store (#365) a…
drmoisan Jul 19, 2026
b2576e8
docs(374): prepare utilitiescs-nullable-dialogs-misc epic child (spec…
drmoisan Jul 19, 2026
adf048b
merge(epic): fan in utilitiescs-nullable-dialogs-misc (#374) prepared…
drmoisan Jul 19, 2026
241d380
docs(epic): back-fill #374 dialogs-misc; add residuals child (9013) p…
drmoisan Jul 19, 2026
499f8d9
docs(375): prepare utilitiescs-nullable-residuals epic child (spec, u…
drmoisan Jul 19, 2026
dd17719
docs(epic): back-fill residuals issue #375 and record execution-time …
drmoisan Jul 19, 2026
2f5cb8a
docs(376): prepare WAVE-2 CI-capstone child of utilitiescs-nullable-r…
drmoisan Jul 19, 2026
c449147
Merge WAVE-2 CI-capstone (#376) prepared child into epic integration
drmoisan Jul 19, 2026
37e6210
docs(epic): back-fill capstone issue_num 9012->376; resolve residuals…
drmoisan Jul 19, 2026
6d4da8b
docs(epic): add epic-orchestrator kickoff prompt artifact
drmoisan Jul 19, 2026
af3239b
test(364): capture Phase 0 baselines for HelperClasses nullable remed…
drmoisan Jul 19, 2026
89bf1cf
feat(364): opt-in Batch 1 root helper classes to #nullable enable
drmoisan Jul 19, 2026
575cc59
feat(364): opt-in Batch 2 logging helpers to #nullable enable
drmoisan Jul 19, 2026
c194362
feat(368): remediate nullable-reference debt in SVGControl/ via per-f…
drmoisan Jul 19, 2026
7dfea43
feat(364): opt-in Batch 3 cloning/reflection helpers to #nullable enable
drmoisan Jul 19, 2026
86fbf9f
feat(364): opt-in Batch 4 filesystem wrappers/adapters to #nullable e…
drmoisan Jul 19, 2026
76ccbfb
feat(364): opt-in Batch 5 COM/P-Invoke/form helpers to #nullable enable
drmoisan Jul 19, 2026
c9284b3
fix(367): remediate nullable-reference-type debt in UtilitiesCS/Newto…
drmoisan Jul 19, 2026
441ce01
feat(364): opt-in Batch 6 Windows Forms helpers to #nullable enable
drmoisan Jul 19, 2026
000b84b
docs(368): add feature-review audit artifacts and coverage-gap dispos…
drmoisan Jul 19, 2026
00aa378
feat(364): opt-in Batch 7 ThemeHelpers/ToolTips to #nullable enable
drmoisan Jul 19, 2026
59b145b
docs(367): add feature-review audit artifacts (policy, code-review, f…
drmoisan Jul 19, 2026
8b95d4a
Merge pull request #377 from drmoisan/feature/utilitiescs-nullable-sv…
drmoisan Jul 19, 2026
6c59157
fix(363): remediate nullable-reference debt in UtilitiesCS/Extensions…
drmoisan Jul 19, 2026
ad78aec
chore(agent-memory): record atomic-executor notes from #363 nullable …
drmoisan Jul 19, 2026
52c1d7c
Merge pull request #378 from drmoisan/feature/utilitiescs-nullable-ne…
drmoisan Jul 19, 2026
8c8b6fe
feat(364): opt-in Batch 8 high-contract helpers to #nullable enable
drmoisan Jul 19, 2026
b1b207b
docs(363): add feature-review audit artifacts (policy/code/feature al…
drmoisan Jul 19, 2026
911cfd1
feat(369): per-file #nullable enable remediation for UtilitiesCS/Thre…
drmoisan Jul 19, 2026
63ac478
Merge remote-tracking branch 'origin/epic/utilitiescs-nullable-remedi…
drmoisan Jul 19, 2026
a095d1a
test(364): final QC loop, coverage delta, and AC check-off for Helper…
drmoisan Jul 19, 2026
2edda57
chore(agent-memory): record #364 nullable-gate pre-existing-blocker f…
drmoisan Jul 19, 2026
11d4761
docs(363): record post-merge nullable pragma gate verification (CS86x…
drmoisan Jul 19, 2026
df2235b
Merge pull request #379 from feature/utilitiescs-nullable-extensions-363
drmoisan Jul 19, 2026
6ea10da
docs(369): add feature-review audit artifacts (blocking_count=0)
drmoisan Jul 19, 2026
e19cd91
Merge pull request #381 from drmoisan/feature/utilitiescs-nullable-th…
drmoisan Jul 19, 2026
4bf7246
docs(364): add feature-review audit artifacts (policy, code, feature)
drmoisan Jul 19, 2026
f12c66f
Merge remote-tracking branch 'origin/epic/utilitiescs-nullable-remedi…
drmoisan Jul 19, 2026
dffadd5
Merge pull request #382 from drmoisan/feature/utilitiescs-nullable-he…
drmoisan Jul 19, 2026
277ac5e
docs(370): capture Phase 0 baseline evidence for email-parsing nullab…
drmoisan Jul 19, 2026
d7ac0cc
docs(372): Phase 0 baseline capture for utilitiescs-nullable-email-cl…
drmoisan Jul 19, 2026
5b3d7e9
fix(370): remediate nullable-reference debt in Batch A trivial leaves
drmoisan Jul 19, 2026
1c55d32
refactor(372): #nullable enable Batch A (Bayesian pure/contract leaves)
drmoisan Jul 19, 2026
914fc8b
fix(370): remediate nullable-reference debt in Batch B CTF/subject-ma…
drmoisan Jul 19, 2026
bce52c6
test(371): Phase 0 baselines for OutlookObjects nullable remediation
drmoisan Jul 19, 2026
58b1f60
feat(371): Batch A dead-code #nullable enable (CaptureEmailAddressesM…
drmoisan Jul 19, 2026
f0aa67a
chore(375): capture Phase 0 baseline evidence for nullable residuals
drmoisan Jul 19, 2026
9a0ba85
refactor(375): #nullable enable opt-in for Batch 0 residual files
drmoisan Jul 19, 2026
f7c21ff
feat(371): Batch B CidImageResolver #nullable enable
drmoisan Jul 19, 2026
b6e9eac
chore(365): Phase 0 baseline capture for nullable Folder/Store remedi…
drmoisan Jul 19, 2026
16877f2
refactor(375): #nullable enable opt-in for Batch 1 small static COM h…
drmoisan Jul 19, 2026
39db950
chore(365): gitignore large coverage XMLs; keep .md coverage summaries
drmoisan Jul 19, 2026
9b5717c
refactor(375): #nullable enable opt-in for Batch 2 readiness gate pair
drmoisan Jul 19, 2026
1947f1d
refactor(375): #nullable enable opt-in for Batch 3 Recipient cluster
drmoisan Jul 19, 2026
eca62b6
feat(371): Batch C small COM-bound leaves #nullable enable
drmoisan Jul 19, 2026
33eee64
refactor(375): #nullable enable opt-in for Batch 4 OneDrive helpers
drmoisan Jul 19, 2026
9427cdd
feat(365): nullable-enable Batch F0 folder interfaces/enums/DTOs (P1)
drmoisan Jul 19, 2026
bf4096b
test(374): Phase 0 baseline capture for dialogs-misc nullable remedia…
drmoisan Jul 19, 2026
9e27794
fix(370): remediate nullable-reference debt in Batch C SubjectMap enc…
drmoisan Jul 19, 2026
cf612a1
refactor(372): #nullable enable Batch B (Corpus, CorpusInherit)
drmoisan Jul 19, 2026
31c9264
feat(374): Batch A nullable remediation (Dialogs leaves)
drmoisan Jul 19, 2026
b255d95
feat(365): nullable-enable Batch F1 folder value/key types and compar…
drmoisan Jul 19, 2026
d5d532a
fix(370): remediate nullable-reference debt in Batch D email filing/c…
drmoisan Jul 19, 2026
0d57cb5
refactor(372): #nullable enable Batch C (scoring engine core)
drmoisan Jul 19, 2026
1c80ac2
refactor(375): #nullable enable opt-in for Batch 5 EmailIntelligence …
drmoisan Jul 19, 2026
c26ff76
feat(374): Batch B nullable remediation (button wrapper types)
drmoisan Jul 19, 2026
6d7c166
refactor(375): #nullable enable opt-in for Batch 6 FilterOlFolders
drmoisan Jul 19, 2026
c56bece
feat(371): Batch D OutlookItem reflection-wrapper family #nullable en…
drmoisan Jul 19, 2026
86ed003
feat(374): Batch C nullable remediation (direct viewer consumers)
drmoisan Jul 19, 2026
ec5386d
fix(370): remediate nullable-reference debt in Batch E image/OCR/toke…
drmoisan Jul 19, 2026
0369d62
feat(365): nullable-enable Batch F2 folder tree snapshot family (P2/P3)
drmoisan Jul 19, 2026
c2b9f7a
refactor(375): #nullable enable opt-in for Batch 7 FolderRemap
drmoisan Jul 19, 2026
37bf553
feat(371): Batch E Attachment cluster #nullable enable
drmoisan Jul 19, 2026
956361b
fix(370): remediate nullable-reference debt in Batch F EmailDataMiner…
drmoisan Jul 19, 2026
8b63c85
refactor(372): #nullable enable Batch D (engine bases, generic engines)
drmoisan Jul 19, 2026
14f5fab
feat(365): nullable-enable Batch F3a folder domain group (P4 T1-T4)
drmoisan Jul 19, 2026
3319059
feat(371): Batch F ItemInfo/EmailDetails/EmailDetailsWrapper #nullabl…
drmoisan Jul 19, 2026
896b9e7
feat(374): Batch D nullable remediation (MyBox core)
drmoisan Jul 19, 2026
15f8a97
feat(365): nullable-enable Batch F3b FolderTree.cs (P4 T5-T7)
drmoisan Jul 19, 2026
cc4c7ab
feat(374): Batch E nullable remediation (MyBox dependents)
drmoisan Jul 19, 2026
e2c874e
refactor(375): #nullable enable opt-in for Batch 8 large COM helpers
drmoisan Jul 19, 2026
a63fc7a
feat(365): nullable-enable Batch F3c FolderScorer.cs (P4 T8-T10)
drmoisan Jul 19, 2026
374f84a
fix(370): remediate nullable-reference debt in Batch G static sorting…
drmoisan Jul 19, 2026
2c341c9
refactor(375): #nullable enable opt-in for To Depricate batch
drmoisan Jul 19, 2026
e5de42e
refactor(375): #nullable enable opt-in for Examples; confirm dead-dup…
drmoisan Jul 19, 2026
1e69f8f
feat(374): Misc batch nullable remediation (verify-only)
drmoisan Jul 19, 2026
49bc28d
feat(365): nullable-enable Batch F3d FolderPredictor partial pair (P4…
drmoisan Jul 19, 2026
4b33e87
test(375): Phase 12 final QC — pragma gate green, coverage neutral, A…
drmoisan Jul 19, 2026
17ae5ac
feat(371): Batch G MailItemHelper partial-class group #nullable enable
drmoisan Jul 19, 2026
433c84d
refactor(372): #nullable enable Batch E (derived engines, predictors)
drmoisan Jul 19, 2026
c413e61
chore(375): record atomic-executor session memory for nullable-residuals
drmoisan Jul 19, 2026
ba3abe2
docs(370): complete Phase 8 final QC and check off AC1-AC6
drmoisan Jul 19, 2026
83fd43c
feat(365): nullable-enable Batch F4 folder service layer (P5)
drmoisan Jul 19, 2026
06ba250
test(374): Phase 7 final QC and acceptance verification
drmoisan Jul 19, 2026
7110570
feat(365): nullable-enable Batch S0 store interfaces/DTO (P6)
drmoisan Jul 19, 2026
52b5007
chore(agent-memory): record sibling-worktree shared-tooling hazard
drmoisan Jul 19, 2026
d214c15
refactor(372): #nullable enable Batch F (Flags subfolder)
drmoisan Jul 19, 2026
9b09b1c
chore(agent-memory): record stale-local-integration-ref hazard for ep…
drmoisan Jul 19, 2026
295f619
feat(365): nullable-enable Batch S1 store value/attribution helpers (P7)
drmoisan Jul 19, 2026
81f143e
feat(371): Batch H ConvHelper partial-class group #nullable enable
drmoisan Jul 19, 2026
fd36dd7
docs(375): add feature-review audit artifacts (blocking_count 0, read…
drmoisan Jul 19, 2026
c01560f
feat(365): nullable-enable Batch S2a StoreWrapper.cs (P8 T1-T3)
drmoisan Jul 19, 2026
1a62ed2
docs(370): add feature-review audit artifacts (blocking_count=0)
drmoisan Jul 19, 2026
27cf64f
Merge pull request #383 from drmoisan/feature/utilitiescs-nullable-re…
drmoisan Jul 19, 2026
5f1778d
feat(365): nullable-enable Batch S2 store domain classes (P8 T4-T9)
drmoisan Jul 19, 2026
3464a58
feat(371): Batch I OlTableExtensions partial-class group #nullable en…
drmoisan Jul 19, 2026
20b5a2e
docs(374): add feature-review artifacts (policy-audit, code-review, f…
drmoisan Jul 19, 2026
1c7e2dc
Merge pull request #384 from drmoisan/feature/utilitiescs-nullable-em…
drmoisan Jul 19, 2026
0bafc5f
feat(365): nullable-enable Batch F5 folder COM-boundary adapters (P9)
drmoisan Jul 19, 2026
d91a2cb
refactor(372): #nullable enable Batch G (Performance tooling)
drmoisan Jul 19, 2026
1d3de69
feat(365): nullable-enable Batch S3 store controllers (P10)
drmoisan Jul 19, 2026
2f6f3fe
fix(371): keep ETL/GetTableInViewAsync/EtlPrepAsync tuples non-null f…
drmoisan Jul 19, 2026
e16ac19
Merge epic integration branch into feature/utilitiescs-nullable-dialo…
drmoisan Jul 19, 2026
aa15479
Merge pull request #385 from drmoisan/feature/utilitiescs-nullable-di…
drmoisan Jul 19, 2026
4d76125
feat(365): nullable-enable Batch S4 store WinForms shells (P11)
drmoisan Jul 19, 2026
170ab5a
test(372): Phase 8 final QC for utilitiescs-nullable-email-classifier
drmoisan Jul 19, 2026
2ff82e9
test(371): Phase 10 final QC, coverage delta, and AC check-off
drmoisan Jul 19, 2026
76bc0f7
chore(372): record executor memory notes for nullable remediation pat…
drmoisan Jul 19, 2026
95b289c
fix(365): nullable IOutlookStoreAdapter.GetRootFolder to match impl (…
drmoisan Jul 19, 2026
0be4b0b
chore(371): record atomic-executor agent-memory notes for OutlookObje…
drmoisan Jul 19, 2026
e00a2c2
test(365): Phase 12 final QC — full toolchain green, AC1-AC7 satisfied
drmoisan Jul 19, 2026
447af7b
docs(372): feature-review audit artifacts (policy, code-review, featu…
drmoisan Jul 19, 2026
4b7faf1
docs(371): add feature-review artifacts (policy-audit, code-review, f…
drmoisan Jul 19, 2026
9389b2e
Merge remote-tracking branch 'origin/epic/utilitiescs-nullable-remedi…
drmoisan Jul 19, 2026
a5cca69
Merge epic integration branch into bug/utilitiescs-nullable-outlook-m…
drmoisan Jul 19, 2026
f642513
Merge pull request #387 from drmoisan/bug/utilitiescs-nullable-outloo…
drmoisan Jul 19, 2026
b66d605
docs(365): add feature-review audit artifacts (blocking_count=0)
drmoisan Jul 19, 2026
3dfe339
Merge pull request #388 from drmoisan/feature/utilitiescs-nullable-ou…
drmoisan Jul 19, 2026
ccf8b4d
Merge remote-tracking branch 'origin/epic/utilitiescs-nullable-remedi…
drmoisan Jul 19, 2026
0b00051
Merge pull request #386 from drmoisan/feature/utilitiescs-nullable-em…
drmoisan Jul 19, 2026
12a709c
feat(366): nullable-annotate UtilitiesCS ReusableTypeClasses batches 1-5
drmoisan Jul 19, 2026
5b10a0d
chore(memory): record net481 nullable pragma-gate + CS8714 findings
drmoisan Jul 19, 2026
65dc5c1
chore(memory): record #366 child-orchestrator findings
drmoisan Jul 19, 2026
ddbe93b
feat(366): Batch 6 concurrent-observable bases + ratified where TKey …
drmoisan Jul 20, 2026
7f605e3
feat(366): Batch 7 nullable-annotate SmartSerializable family + Confi…
drmoisan Jul 20, 2026
20f13a7
feat(366): Batch 8 nullable-annotate Serializable wrappers (ScDiction…
drmoisan Jul 20, 2026
2afaddb
docs(366): record epic Option A-prime three-file cross-child waiver
drmoisan Jul 20, 2026
685a7a2
feat(366): complete Batch 8 ratified where TKey:notnull constraint (f…
drmoisan Jul 20, 2026
120365b
docs(366): feature-review artifacts (blocking_count 0; AC1-AC6 PASS)
drmoisan Jul 20, 2026
bfcdb39
Merge pull request #380 from drmoisan/feature/utilitiescs-nullable-re…
drmoisan Jul 20, 2026
3842941
feat(376): finalize CI nullable gate to per-file pragma enforcement, …
drmoisan Jul 20, 2026
9dd6ee7
Merge pull request #389 from drmoisan/feature/utilitiescs-nullable-ci…
drmoisan Jul 20, 2026
f451ee1
docs(376): record the workflow_dispatch green-run evidence satisfying…
drmoisan Jul 20, 2026
a242acd
merge(integration): sync origin/main (bd435724, PR #362) into epic in…
drmoisan Jul 20, 2026
763f922
docs(epic): capture agent memories and epic-status for utilitiescs-nu…
drmoisan Jul 20, 2026
a105c4e
merge(integration): sync origin/main (83b66e5b, PR #393) into epic in…
drmoisan Jul 20, 2026
2ab4a43
chore(agent-memory): orchestrator notes from #363 epic-child delivery
drmoisan Jul 19, 2026
9dc9490
chore(agent-memory): record epic-child agent-memory merge-conflict pa…
drmoisan Jul 19, 2026
ff7e243
chore(372): record epic-child cross-child nullable fan-in debt lesson
drmoisan Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 17 additions & 0 deletions .claude/agent-memory/atomic-executor/MEMORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Atomic Executor Memory Index

- [#376 capstone scope-expansion layers](project_376_capstone_scope_expansion_layers.md) — 5 escalated layers past P2-T17 (ToDoModel CS0618 -> TaskVisualization CS4014/ToDoModel.Test CS0169 -> QuickFiler CS0108/CS0618/CS8600 -> TaskMaster CS8632/CS8767/CS0618 + QuickFiler.Test MSTEST0032 -> TaskMaster.Test/UtilitiesCS.Test CS8632/CS8625/CS0067); all resolved via the 3 authorized patterns, stop-condition never triggered
- [BOM breaks grep ^ anchor](project_bom_grep_anchor_false_negative.md) — bash/GNU grep's `^#nullable` silently misses BOM-prefixed UtilitiesCS files (400 opted-in via ripgrep, not 156 via bash grep); always use the Grep tool for opt-in/candidate-file classification, never bash grep
- [#372 email-classifier nullable patterns](project_372_email_classifier_nullable_patterns.md) — engine props set post-ctor=`null!`; factory returns `T?`; Prediction.Class T? cascade=`.Class!`; net481 IsNullOrEmpty no-narrow; `(await Deserialize())!` not `await Deserialize()!`; DTO `= null!` adds a coverage line; measured 30 emitting (not epic ~18)
- [Timed-out MSTest leaves detached runner](project_timedout_mstest_leaves_detached_runner.md) — a timed-out Invoke-MSTestWithCoverage bash call leaves a detached pwsh runner respawning testhosts; second run contends over user.config (ConfigurationErrorsException in unrelated TaskTree/ToDoModel) and hangs — kill the pwsh runner too, verify 0, then rerun with >=8min timeout
- [#371 OutlookObjects nullable lessons](project_371_outlookobjects_nullable_lessons.md) — public-signature nullable change regresses OTHER nullable-enabled files in same assembly (DfDeedle) — check TOTAL UtilitiesCS CS86xx per batch, keep public tuples non-null w/ ! at null sites; lazy-field CS8618→Lazy<T>?; ToLazy has class constraint; _item=null! for GetOrLoad ref-match; ForEach commented-but-resolves (grep gate=flag not block)
- [Sibling-worktree shared-tooling hazard](project_sibling_worktree_shared_tooling_hazard.md) — a concurrent agent in a DIFFERENT worktree crashes your testhost + clobbers /tmp logs via shared global vstest/dotnet-coverage; use session scratchpad for logs, poll for a quiet machine before test runs, trust bash `$?` not log counts, never kill/commit others' processes/memory files
- [#375 residuals nullable gotchas](project_375_residuals_nullable_gotchas.md) — CS8644 inherited-interface mismatch from oblivious #366 base fixed with a `#nullable disable` island on the class-declaration line (not `!`); full-solution Rebuild cleans SVGControl.dll → isolated gate CS0006, re-run no-TWAE Build first; MeetingItemHelper Lazy<T> classes: bulk `= null!` + `(...)!` getters/lambdas beats widening the API (Python utf-8-sig for CRLF+BOM files)
- [#364 nullable-gate pre-existing blockers](project_364_nullable_gate_preexisting_blockers.md) — full-solution pragma-only TWAE gate fails at baseline (vendored SVGControl CS0649 + non-HelperClasses CS0618/CS0168); verify CS86xx via isolated UtilitiesCS build w/ BuildProjectReferences=false; analyzer-version drift needs nuget-install into packages/; coverage script single-assembly StrictMode bug
- [Nullable per-file pragma gate mechanics](project_nullable_pragma_gate_mechanics.md) — solution-wide TWAE aborts on vendored SVGControl CS0649; verify via isolated `UtilitiesCS.csproj -t:Rebuild -p:Platform=AnyCPU -p:BuildProjectReferences=false` + grep CS86xx=0
- [Analyzer version skew on fresh worktree](project_analyzer_version_skew_fresh_worktree.md) — first analyzer build fails CS0006 (Meziantou 3.0.101/Sonar 10.27/BannedApi 3.3.4 missing); nuget install old versions into gitignored packages/, don't edit 16 csproj
- [Nullable remediation annotation patterns](project_nullable_remediation_annotation_patterns.md) — net481 no post-condition attrs; EmailRecord struct `= default!`; `.ToString()!` for string cells; IsNullOrEmpty overload gotcha; `x!.M()` for defensive-flow-state
- [Nullable epic: pragma gate + analyzer restore](project_nullable_epic_pragma_gate_and_analyzer_restore.md) — per-file #nullable children: exact solution TWAE gate is blocked by pre-existing SVGControl CS0649 + UtilitiesCS CS0618/CS0168; use scoped `UtilitiesCS.csproj TWAE /p:WarningsNotAsErrors=CS0649%3BCS0618%3BCS0168`; restore mismatched analyzer pkgs (csproj 3.0.101 vs packages.config 3.0.123) into packages/ first
- [Nullable pragma-gate net481 mechanics](project_nullable_pragma_gate_net481_mechanics.md) — per-file #nullable gate can't hit EXIT_CODE 0 (stale csproj analyzer paths vs packages.config, vendored SVGControl CS0649, ~14 pre-existing UtilitiesCS CS0168/CS0618 under TWAE); measure CS86xx attributed to ReusableTypeClasses via SVGControl-prebuilt + /p:BuildProjectReferences=false + /p:Platform=AnyCPU
- [CS8714 does not fire on net481](project_nullable_cs8714_not_on_net481.md) — ConcurrentDictionary-derived unconstrained-TKey types emit 0 CS8714 under #nullable enable because net481 BCL refs lack the notnull constraint; `where TKey : notnull` is forward-looking, not required
- [#349 breadcrumb WebView2 gotchas](project_349_breadcrumb_webview2_gotchas.md) — retyped Designer field breaks reflection-injected tests (inject a router instead); aggregate async d__ classes for >=90% proofs; QuickFiler.Test is Newtonsoft-free

- [VS18 build/test toolchain paths](project_vs18_build_toolchain_paths.md) — build with VS **18** full-framework msbuild.exe (not Core .dotnet-sdk, which dies on binary resx MSB3822); nuget.exe restore; MSYS_NO_PATHCONV; csharpier v1 subcommands; dotnet-coverage needs `--` separator
Expand All @@ -8,6 +22,9 @@
- [sln/csproj edits: preserve CRLF](project_sln_csproj_edit_crlf_preserve.md) — git-bash `sed -i` strips CRLF from TaskMaster.sln (whole-file churn + BOM loss); use Edit tool or `perl -0777` with explicit `\r\n`; verify with `file` + `git diff --stat`
- [Swordfish F5 test misclassification](project_swordfish_f5_test_misclassification.md) — #308 plan labeled two F2 clean-base tests as "direct-Swordfish"; only 1 of 3 truly bound Swordfish; verify using/namespace before treating a test removal as Swordfish-only; AC-12 raised #317 for the unique lock-recursion coverage
- [ScoDictionaryNew needs TryAdd not Add](project_scodictionarynew_tryadd_not_add.md) — retargeting Sco* stand-in tests to ScoDictionaryNew: `.Add(key,value)` won't compile (CS1061); base ConcurrentObservableDictionary exposes `.TryAdd`; swap in the same edit to avoid a build-fail loop
- [#366 notnull cascades past WrapperScoDictionary](project_366_notnull_cascades_beyond_wrapperscodictionary.md) — the ratified `where TKey : notnull` on the dictionary bases also forces the constraint onto ScoDictionaryConverter (a 2nd #367 file, CS8714 at lines 27/28/40), exceeding the 1-file Option-A waiver; fix = same one-line constraint on ScoDictionaryConverter<TDerived,TKey,TValue>
- [#366 ScDictionary constraint cascades to a 4th file](project_366_scdictionary_constraint_cascades_to_fourth_file.md) — constraining ScDictionary/WrapperScDictionary cascades CS8714 into ScDictionaryConverter.cs (no 'o', a 4th #367 file beyond the 3-file waiver); STOP + re-escalate, don't widen
- [#366 Batch7 T? return triggers CS8766](project_366_batch7_tnullable_return_cs8766.md) — annotating a `class`-constrained generic method return as `T?` when it implements an out-of-scope null-oblivious interface member (declared `T`) emits CS8766; conform to `T` + justified `!`, don't edit the interface (scope STOP)
- [Concurrent executor in same worktree](project_concurrent_executor_same_worktree.md) — two executors on one plan/worktree corrupt shared files; detect via mtime progression during your own turn; STOP, don't stash/race

- [TaskController (#297) unit-test gotchas](project_taskvisualization_taskcontroller_test_gotchas.md) — ApplyChanges hangs over Moq (mark exempt); get-only MailItem.TaskSubject throws MissingMethodException; STA harness needs TableLayoutPanel parenting + NavTips warmup + no DateTimePicker.Text; C# 7.3 test project; tail-piped vstest buffers til exit
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: 364-nullable-gate-preexisting-blockers
description: The full-solution pragma-only nullable gate fails at baseline on the epic-integration branch (vendored SVGControl CS0649 + non-HelperClasses UtilitiesCS CS0618/CS0168); verify CS86xx via isolated UtilitiesCS build. Plus analyzer-version drift and coverage-script single-assembly bug.
metadata:
type: project
---

Executing the `utilitiescs-nullable-remediation` epic children (e.g. #364 HelperClasses) on branches off `epic/utilitiescs-nullable-remediation-integration`.

**Why:** The recent HEAD commit changed the CI nullable gate from `/t:Build` (a silent no-op) to `/t:Rebuild`, so a genuine recompile now surfaces pre-existing warnings that `/p:TreatWarningsAsErrors=true` promotes to errors — across projects that are OUT of a given child's scope.

**How to apply:**

1. The plan-literal gate `msbuild TaskMaster.sln /t:Rebuild /p:TreatWarningsAsErrors=true` (no `/p:Nullable=enable`) FAILS at baseline, before any edit: vendored `SVGControl/SvgImageSelector.cs` has 2 pre-existing CS0649 (fields never assigned, dating to 2023) that halt the solution build early; and non-HelperClasses `UtilitiesCS` files (EmailIntelligence/, Extensions/) have ~28 CS0618 + 2 CS0168. None are fixable within a HelperClasses-scoped child. Flag them; do not treat as regressions.
2. Authoritative CS86xx verification for a UtilitiesCS child: first build the solution once WITHOUT TWAE so SVGControl.dll exists, then `msbuild UtilitiesCS/UtilitiesCS.csproj /t:Rebuild /p:Configuration=Debug /p:Platform=AnyCPU /p:BuildProjectReferences=false` (no TWAE) and grep the output for `warning CS86`. CS86xx are severity-independent and arise only from `#nullable enable` files (project default is oblivious — `UtilitiesCS.csproj` has no `<Nullable>`), so zero CS86xx warnings == zero CS86xx errors under TWAE. `BuildProjectReferences=false` avoids re-triggering the SVGControl halt (UtilitiesCS has a project ref to SVGControl).
3. Analyzer version drift: `UtilitiesCS.csproj`/`VBFunctions.csproj` `<Analyzer Include>` paths pin OLDER analyzer versions (Meziantou 3.0.101, SonarAnalyzer 10.27.0.140913, BannedApiAnalyzers 3.3.4) than `packages.config` (3.0.123 / 10.29.0.143774 / 5.6.0). `main` has the reconciling commit (097f0ba2) but the epic-integration base does not. `Sync-PackageReferences.ps1` only fixes `<HintPath>`, NOT `<Analyzer Include>`, so the analyzer build gets CS0006. Fix without touching tracked files: `nuget.exe install <id> -Version <old> -OutputDirectory packages` for the three csproj-referenced versions (packages/ is gitignored).
4. `scripts/vscode/Invoke-MSTestWithCoverage.ps1` throws under StrictMode when discovery returns a SINGLE test assembly (`$testAssemblies.Count` on a scalar). To scope coverage to one assembly (e.g. UtilitiesCS.Test), invoke the underlying command directly: `dotnet-coverage collect --output <cobertura> --output-format cobertura --settings coverage.config -- <vstest> UtilitiesCS.Test\bin\Debug\UtilitiesCS.Test.dll /Settings:scripts/vscode/TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:TestCategory!=LiveOutlook`.
5. Env bootstrap on a fresh worktree: `Invoke-Restore.ps1` (nuget restore, 169 pkgs) then the analyzer install in (3). Global `csharpier` is v1.3.0 (subcommand syntax `csharpier check .` / `csharpier format .`, NOT `--check`); `dotnet tool run csharpier` fails because the repo-local .NET SDK is not installed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: 366-batch7-tnullable-return-cs8766
description: On #366 nullable batches, annotating a generic-class method return as T? when it implements an out-of-scope null-oblivious interface member declared T triggers CS8766; conform to T + justified ! instead
metadata:
type: project
---

On epic child #366 (utilitiescs-nullable-reusabletypes), Batch 7 (SmartSerializable family), the prior agent annotated `SmartSerializable<T>.DeserializeObject` with a `T?` return. Under the isolated per-file pragma gate (`/t:Rebuild /p:TreatWarningsAsErrors=true /p:BuildProjectReferences=false`, no `/p:Nullable=enable`) this emitted `error CS8766` (nullability of return type doesn't match implicitly implemented member) against `ISmartSerializable<T>.DeserializeObject` — which is declared `T` and lives in `UtilitiesCS/Interfaces/IReusableTypeClasses/ISmartSerializable.cs`, OUT OF SCOPE (not one of the 7 Batch 7 ReusableTypeClasses files).

**Why:** CS8766 fires even against a null-oblivious interface when the implementing type parameter is `where T : class` constrained (constrained `T` return is treated as non-null in the nullable-enabled implementation, so `T?` is strictly more nullable than the interface's `T`). Method-level unconstrained `<T>` returns (e.g. `SmartSerializableBase.DeserializeObject<T>`, `SmartSerializableNonTyped.DeserializeObject<T>`) do NOT emit CS8766 with `T?` — only the class-level `class`-constrained `T` case does.

**How to apply:** Do NOT edit the interface (out of scope; would be a SCOPE-CHANGE STOP). Conform the implementation return type to the interface's `T` and return the genuinely-nullable local with a justified `!` + `// why` comment noting the oblivious interface contract is preserved (AC5 signature-compatible). Watch for this same pattern on any remaining child (#367 etc.) that annotates a `class`-constrained generic method implementing an oblivious interface member. Baseline whole-assembly gate decomposition for UtilitiesCS.csproj isolated compile is 28 CS0618 + 2 CS0168 (all pre-existing non-cluster files: Triage, SortEmail, ManagerAsyncLazy, etc.) — same as Batch 6.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
name: 366-notnull-cascades-beyond-wrapperscodictionary
description: The #366 `where TKey : notnull` constraint on the dictionary bases cascades past WrapperScoDictionary into a SECOND #367 file (ScoDictionaryConverter), exceeding the bounded Option-A waiver
metadata:
type: project
---

On epic child #366 (utilitiescs-nullable-reusabletypes), applying the ratified `where TKey : notnull` constraint to `ConcurrentObservableDictionary<TKey,TValue>` forces the same constraint onto every nullable-enabled #367 consumer that passes an UNCONSTRAINED `TKey`. The epic Option-A waiver predicted only `WrapperScoDictionary<TDerived,TKey,TValue>` (`UtilitiesCS/NewtonsoftHelpers/WrapperScoDictionary.cs`, 4 CS8714 sites) and authorized EXACTLY that one file + one clause.

Reality (measured 2026-07-19, VS18 isolated UtilitiesCS.csproj `/t:Rebuild /p:TreatWarningsAsErrors=true /p:BuildProjectReferences=false`): once `WrapperScoDictionary` itself gets the constraint, a SECOND #367 NewtonsoftHelpers file — `ScoDictionaryConverter<TDerived,TKey,TValue>` in `UtilitiesCS/NewtonsoftHelpers/ScoDictionaryConverter.cs` — emits 3 unique CS8714 (lines 27,28,40; double-counted to 6 under recompile) because it constructs `WrapperScoDictionary<TDerived,TKey,TValue>` / `serializer.Deserialize(..., typeof(WrapperScoDictionary<TDerived,TKey,TValue>))` with its own unconstrained `TKey`. Its `where TDerived : ScoDictionaryNew<TKey,TValue>` would independently force the same constraint once ScoDictionaryNew is constrained in Phase 8, so this file needs `where TKey : notnull` regardless.

**Why:** the cascade is inherent to constraining any of the four generic dictionary bases — it propagates to every generic #367 wrapper/converter with an unconstrained TKey, not just the direct WrapperScoDictionary consumer.

**How to apply:** the minimal fix that closes the ScoDictionaryNew/ConcurrentObservableDictionary chain is symmetric — add `where TKey : notnull` to `ScoDictionaryConverter<TDerived,TKey,TValue>` (one line, after its `where TDerived : ...`). Verified-safe non-cascade files: `PeopleScoConverter` references WrapperScoDictionary only in commented-out code and is otherwise concrete (`PeopleScoDictionaryNew`); `WrapperPeopleScoDictionaryNew` uses concrete `ScoDictionaryNew<string,string>` / `ConcurrentObservableDictionary<string,string>` — neither emits CS8714. So a widened waiver of exactly TWO files (WrapperScoDictionary.cs + ScoDictionaryConverter.cs), one `where TKey : notnull` line each, clears the ScoDictionaryNew chain. Under the original one-file bounded waiver this is a hard STOP — do not suppress with `#pragma warning disable`, do not widen unilaterally; report and get the waiver extended. See [[project_scodictionarynew_tryadd_not_add]].

**Batch 8 (#366) discovered a SEPARATE, THIRD chain (2026-07-19):** the ratified `where TKey : notnull` on `ScDictionary<TKey,TValue>` (a plain `ConcurrentDictionary`-based serializable dict, NOT the observable ScoDictionaryNew) cascades into its OWN wrapper `WrapperScDictionary<TDerived,TKey,TValue>` (`UtilitiesCS/NewtonsoftHelpers/WrapperScDictionary.cs`, line 18/19: `where TDerived : ScDictionary<TKey,TValue>`, unconstrained TKey, already `#nullable enable` via merged #367) — 1 unique CS8714 (double-counted to 2 under Rebuild). This file is NOT one of the two Batch-6-waived files, so it is a hard STOP requiring a fresh epic waiver-extension decision. Note: `ScoDictionaryStatic` is listed in the [P6-T2] ratification as one of the "four generic dictionary bases" but is actually a NON-generic `static class` of Type extension methods — the `where TKey : notnull` constraint is mechanically inapplicable there (no TKey). Batch-8 green state = ScoDictionaryNew constrained (required, cascade absorbed by the two waiver files), ScDictionary constraint REVERTED to keep the tree green pending the epic decision. `ScBag` is `ConcurrentBag<T>`-based, no constraint.
Loading
Loading