Outlook Assistant v3.7.4 — JSON-Stringified Arrays + KQL Search Fixed
Outlook Assistant v3.7.4 patches two regressions surfaced by independent v3.7.3 re-verification: F-24 chokepoint catches JSON-stringified arrays, and search-emails kqlQuery no longer silently drops.
Highlights
F-24 chokepoint catches JSON-stringified arrays
v3.7.3 rejected live JS arrays in string-typed recipient params. v3.7.4 also rejects strings that parse as JSON arrays — some MCP transports stringify arrays before transmission. Same friendly hint, no more opaque Graph 400s.
kqlQuery no longer silently drops
two bugs in search-emails Step 0: kqlQuery was auto-wrapped in extra double quotes (breaking nested-quote field syntax like subject:\"foo bar\"), and Step 0 falling through to combined-search ran without the filter, returning misleading recent unfiltered results. Both fixed; empty results carry noResults: true; errors carry kqlError + raw-kql-error strategy line.
F-17 maxResults alias completion
list mode now also honours maxResults, not just search mode. search-emails folder=junk maxResults=5 returns 5 results, not the previous 25.
Documentation: ROADMAP.md + docs/faq/index.md
ROADMAP.md covering active v3.7.5, v3.8.0, v3.9.0 milestones plus recent shipped work (closes the audit gap from littlebearapps/littlebearapps.com#142). docs/faq/index.md with 11 Q/A pairs — installs, accounts, permissions, tokens, read-only, Azure, auth methods, updates, uninstall, privacy, support.
What’s new in v3.7.4
A patch release. Strictly, three patches plus two new docs.
F-24 redux: JSON-stringified arrays
v3.7.3’s MCP chokepoint added a rejection for live JS arrays in string-typed recipient params (to, cc, bcc — they take comma-separated strings, not arrays). Independent re-verification found that some MCP transports JSON-stringify array literals before transmission when the schema declares type: "string" — so the chokepoint received the literal string '["a@x.com"]' (brackets and quotes intact) and Array.isArray returned false. The user-visible failure mode (Graph 400 ErrorInvalidRecipients) was unchanged: the literal string was passed through, Graph rejected it as invalid.
v3.7.4 also detects strings that parse as JSON arrays and rejects them with the same friendly hint, including the comma-joined form callers should pass instead. False-positive guards verified against bracketed subjects ([GitHub] PR opened) and malformed brackets.
kqlQuery no longer silently drops
search-emails has a “Step 0” that runs raw KQL via Graph’s $search if kqlQuery is provided. Two bugs lived there:
- The kqlQuery was auto-wrapped in extra double quotes. Any caller using KQL field syntax (e.g.
subject:"foo bar") ended up with"subject:"foo bar""— broken nested quotes that Graph parsed unpredictably or failed to honour. - If Step 0 returned 0 results (often a side-effect of bug 1), execution silently fell through to combined-search, which ran without the kqlQuery filter and returned recent unfiltered messages with a misleading
combined-searchstrategy line. This is the same class of bug as v3.7.1’s silent-fallback issue, just on a different code path.
v3.7.4 fixes both: don’t auto-wrap quoted/multi-word/colon-bearing kqlQuery values; only quote bare single tokens. Always return from the raw-KQL branch — never fall through. Empty results carry noResults: true so the formatter shows the helpful suggestions block. Errors carry a kqlError marker and a raw-kql-error strategy line.
F-17 maxResults alias completion
The original v3.7.3 fix wired maxResults (alias for count) through email/search.js. Turned out email/list.js had its own copy of the limit logic that wasn’t updated. search-emails folder=junk maxResults=5 was returning 25 results because list mode was the path running. Wired through both code paths now.
Docs: ROADMAP.md + FAQ
Two new files in the repo:
ROADMAP.mdcovers the active v3.7.5, v3.8.0, v3.9.0 milestones plus a recently-shipped section. Linked from the README. Resolves the “no published roadmap to compare against” gap surfaced during the v3.7.2 build-page audit (littlebearapps/littlebearapps.com#142).docs/faq/index.md— 11 question/answer pairs covering install, account compatibility, Microsoft Graph permissions, token storage, read-only mode, Azure registration, device-code-vs-browser auth, updates, uninstall, privacy, and getting help. The marketing-site help-centre sync picks it up automatically and emits Schema.orgFAQPageJSON-LD on the rendered page (closes littlebearapps/outlook-assistant#167).
Test suite
690 → 708 passing tests, 26 suites, 0 failures. 18 new regression cases: 5 for #168 covering both array forms, whitespace, multi-element arrays, and false-positive guards; 7 for #169 covering silent-drop prevention, no-double-wrap on quoted/colon/multi-word KQL, single-token auto-wrap, and error surfacing. The remainder are minor coverage extensions.
Three things deferred to v3.8.0: searchAllFolders=true zero-results disparity on personal accounts (#169 V37-F-2), multi-word AND-match edge case for bracket-prefixed subjects (#138 V37-F-3 / F-12), and renaming kqlQuery to something less misleading.
This update is for
Outlook Assistant — view full product page