Skip to content

fix: rule-create resolves move-to-folder at any nesting depth - #14

Merged
neilgfoster merged 1 commit into
mainfrom
007-nested-folder-target
Jun 23, 2026
Merged

fix: rule-create resolves move-to-folder at any nesting depth#14
neilgfoster merged 1 commit into
mainfrom
007-nested-folder-target

Conversation

@neilgfoster

Copy link
Copy Markdown
Owner

Problem

rule-create --move_to_folder <name> resolved its target via graph._resolve_folder_id, which enumerated only GET /me/mailFolders (immediate children of the mailbox root). Any folder nested under Inbox (e.g. Inbox/Newsletters) was invisible, so rule authoring failed with "No mail folder named '' was found" — even though message-move and mail-list resolve nested folders fine via the depth-aware _folder_name_map. This directly blocked the two-tier folder model, where filing folders are nested under Inbox by design.

Fix

Route _resolve_folder_id through the existing recursive _folder_name_map (id→displayName at any depth), with a well-known-name fast path, and preserve the existing SteerError when the name exists nowhere. searchfolder-create shares the helper, so its source-folder resolution gains nested support too. No new OAuth scope (MailboxSettings.ReadWrite unchanged).

Tests

  • New: a folder nested under Inbox resolves to the nested folder's id.
  • New: a non-existent name still raises SteerError and issues no rule POST.
  • Re-pointed the existing success test to the recursive query shape.
  • Full suite green (79 passed); ruff clean.

Implements and removes docs/HANDOVER-nested-folder-rule-target.md. Developed via the repo's local SDD flow (specs/007-nested-folder-target, gitignored).

🤖 Generated with Claude Code

rule-create --move_to_folder resolved its target via _resolve_folder_id,
which enumerated only GET /me/mailFolders (immediate children of the
mailbox root), so a folder nested under Inbox (e.g. Inbox/Newsletters)
failed with "No mail folder named '<name>' was found" — even though
message-move and mail-list resolve nested folders fine.

Route _resolve_folder_id through the existing depth-aware
_folder_name_map (id->displayName at any depth) with a well-known-name
fast path, preserving the steering error when the name exists nowhere.
searchfolder-create shares the helper, so its source-folder resolution
gains nested support too. No new OAuth scope.

Adds regression tests (nested-under-Inbox resolves to the nested id;
non-existent name still raises SteerError with no POST) and re-points
the existing success test to the recursive query shape.

Implements docs/HANDOVER-nested-folder-rule-target.md (now removed).
Spec: specs/007-nested-folder-target (gitignored, local SDD).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@neilgfoster
neilgfoster merged commit 393f007 into main Jun 23, 2026
1 check passed
@neilgfoster
neilgfoster deleted the 007-nested-folder-target branch June 23, 2026 21:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant