Repository navigation
fix(quickfiler): EFC recursive subfolder selection, trash selection, and QFC nested indentation (#1002) - #1003
Merged
drmoisan merged 16 commits intoOct 22, 2026
Conversation
…folder Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
- Add recursive subfolder expansion and selection to the EFC breadcrumb tree through a keyed descendant tree on BreadcrumbRow, new descendantToggle and descendantActivate messages, and recursive rendering - Guard against stale expansion completions, including the first-level ExpandLeafAsync path - Select the trash entry created by the EFC trash button through a preferred-row bind - Place the +/- toggle after the name on nested QFC subfolder rows and indent each level by 16px - Add regression tests and feature-folder evidence for the router, codec, renderer, and nesting behavior Refs: #1002 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
- Add tests for BindFolderRows and BindSourceFolderRows - Add null-argument tests for the breadcrumb message constructors - Add a null-viewer delete-gesture test - Apply maintainer-ratified member-level ExcludeFromCodeCoverage to the MessageBox-bound EFC action handlers, RefreshSuggestionsAsync and ConfigureBreadcrumbControl - Add a selected-descendant highlight rule to both EFC themes - Restore ellipsis truncation on .child .name - Add remediation evidence for cycle 1 Refs: #1002 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
- Amend AC23 to name the five maintainer-ratified ExcludeFromCodeCoverage members and add a dated amendment entry to spec.md - Name the EfcViewer dependency in the ActionCancelAsync exemption comment - Fault the delivered-task waits in the EFC tests on a bind fault instead of hanging, and add a test for that path - Wrap child names in a name span in the bridge subfolderResult handler so truncation applies, with a text-contract test - Add cycle 2 evidence for the baseline, QA gates, coverage, and child-name dispositions Refs: #1002 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
2 of 5 tasks
Co-Authored-By: Claude Opus 5.5 (noreply@anthropic.com) Claude-Session: https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P
1 of 5 tasks
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.
Suggested title
fix(quickfiler): EFC recursive subfolder selection, trash selection, and QFC nested indentation (#1002)
Summary
SelectHierarchyPath.BreadcrumbRow, two inbound message types (descendantToggle,descendantActivate), recursive rendering, and stale-completion guards for descendant and first-level expansion.EfcFormControllermembers carry a member-level[ExcludeFromCodeCoverage], ratified by the maintainer (see Risks).Why
Per the feature spec, three defects affected the QuickFiler folder-selection surfaces:
What Changed
Core feature (C#,
QuickFilerandUtilitiesCS):BreadcrumbRow(new partial file) reusing the existingBreadcrumbDescendantNode;BreadcrumbMessagesandBreadcrumbMessageCodecacceptdescendantToggleanddescendantActivatewith a non-empty stringnodeId(exposed asBreadcrumbInboundMessage.NodeId);BreadcrumbHtmlRendererrenders children recursively with the node affordance after the name; the EFC router routes both messages with stale-completion guards;BreadcrumbDocumentAssetsbridge script and base CSS updated.BreadcrumbBridgeRouter.BindRowsAsyncaccepts an optional preferred row so the trash row is selected before document delivery; the preferred-row computation is shared withSelectRow; the delete gesture path inEfcFormControllerawaits the bind.QuickFiler/Resources/FolderBreadcrumb.jsmakeSubfoldersappends the name before the toggle, takes a depth argument, and sets adata-depthattribute and inline left padding (24 px plus 16 px per level).Tests:
UtilitiesCS.Test(codec, row descendants, HTML renderer) andQuickFiler.Test(router, stale completion, trash, controller, QFC nesting text contract).tests/quickfiler-breadcrumb/for the real page script.Docs:
docs/features/active/2026-10-22-efc-qfc-folder-tree-selection-and-nesting-1002with spec, plan, research, audits, and Markdown evidence projections.Architecture / How It Fits Together
descendantToggleordescendantActivatewith row and node identity. The router validates identity, callsGetImmediateSubfoldersAsyncfor a toggle, attaches children to the row only if the node is still expanded and its request generation is current, and posts one row render. An activation callsSelectHierarchyPath, which raisesSelectedFolderPathChangedonce.ActionDeleteAsyncbinds rows with the trash row as the preferred row, soSelectedFolderPathequals "Trash to Delete" beforeDeliverDocument.FolderBreadcrumb.htmlare not modified.Verification
Completed (from the committed evidence projections):
scripts/vscode/Invoke-MSTestWithCoverage.ps1): 7599 total, 7599 passed, 0 failed.EfcFormController.Actions.cs: 26/28 lines (92.86%), 13/16 branches (81.25%), unchanged from baseline.feature-audit.2026-10-22T14-10.md). Spec acceptance criteria AC1 to AC26 are all checked..mjssuites. C# text-contract tests (for exampleMakeSubfolders_AppendsNameBeforeToggleand the bridge-script ordering tests) cover the JavaScript behavior in CI; the node suites were run locally and recorded inevidence/regression-testing/node-suites-run.2026-10-22T10-14.md.Pending (AC26, non-blocking):
evidence/other/manual-outlook-check.2026-10-22T10-17.mdrecords the steps for the maintainer: EFC grandchild selection and OK, EFC trash highlight and OK, QFC +/- placement after the name, and QFC one-step indentation per level.Recommended:
dotnet tool run csharpier check .msbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=truemsbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=truetest: MSTest with Coverage (Koverage)taskBackward Compatibility / Migration Notes
BreadcrumbInboundMessagegains an optional trailingnodeIdparameter, andBindRowsAsyncgains an optional preferred-row parameter; existing callers compile unchanged.Risks and Mitigations
EfcFormControllermembers (ActionOkAsync,ActionCancelAsync,CreateFolderAsync,RefreshSuggestionsAsync,ConfigureBreadcrumbControl) carry member-level[ExcludeFromCodeCoverage]. This exclusion was ratified by the maintainer under CLAUDE.md UT2. Nocoverage.configentry and no class-level exclusion was added.Review Guide
docs/features/active/2026-10-22-efc-qfc-folder-tree-selection-and-nesting-1002/spec.mdfor acceptance criteria.UtilitiesCS/OutlookObjects/Folder/(messages, codec, row state, renderer, assets).QuickFiler/Controllers/(router partials,EfcFormController).QuickFiler/Resources/FolderBreadcrumb.js.Follow-ups
GitHub Auto-close
🤖 Generated with Claude Code
https://claude.ai/code/session_014ASyXWyEc23fGahFNciw3P