fix(integrations): close stale and empty value leaks from the Google and Microsoft sweeps
Merged
WA
2d ago+433+433+012345678901234567890123456789-386-386-012345678901234567890123456789
Summary
This PR comes from a final staging→main review of the Google (#9947, #9954) and Microsoft (#9949) integration sweeps. The review targeted backwards compatibility for workflows saved on main. Most fixes share one root cause:
- The generic handler builds tool params as
{ ...inputs, ...transformedParams }. - The serializer fills empty defaults for dropdowns declared with
value: () => '', and keeps advanced values when advanced options are collapsed. - So a value stored for another operation, or a never-touched empty default, reached a tool whenever the block mapper skipped that key.
Fixes:
- Outlook:
- Reply, Reply All and Forward now always set
cc/bcc. Before, a CC saved while the block was on Send was added to replies and forwards after switching operations. - Send and Draft now always set
importance. Before, an Update Message importance leaked into sends. - The new Importance dropdown defaults to unset, where it used to persist "Low".
- Reply, Reply All and Forward now always set
- Google Groups Update Settings: the mapper assigns every setting. Before, an untouched block sent five settings as
'', where main sent an empty PATCH. - Google Tasks List: the tri-state filters are assigned explicitly, and the tool skips empty values. Before,
showHidden=&showDeleted=&showAssigned=were sent when advanced options were shown. - OneDrive: "If File Exists" defaults to unset, so opening an old upload block no longer starts sending
conflictBehavior=replace. - Google Sheets: a Batch Get Major Dimension is cleared for every other operation. Before, it could transpose Read/Write values.
- Azure DevOps:
- List Pipelines and Get Comments keep main's fallback to the shared Max Results value.
- Each paged operation has its own continuation token.
- Multi-item reads (query, batch) omit the raw field bag and relations to keep payloads near main's size. Single-item reads keep them.
- SharePoint upload:
.folder segments are dropped, as on main...is still rejected. - Entra:
transitiveandincludeManageruse one strict check, so"false"stays off. - Dataverse: a cleared Page Size counts as unset.
- Behaviour-neutral cleanups:
- A shared Gmail header lookup.
- One Groups settings mapper.
- Word reuses OneDrive's identity mapper and one metadata output constant.
- One Dataverse
isSet. - SharePoint internals use
graphPathSegment. - Typed identity reads in Azure DevOps.
- Teams fallback trigger payload sets new outputs to null.
- Smaller Calendar and Meet tidy-ups.
- One Azure DevOps test now uses
vi.stubGlobal.
Type of Change
- Bug fix
Testing
- New regression tests for the Outlook, Google Groups and Google Tasks block mappers. All 6 fail on the pre-fix staging code and pass now.
vitestacross 62 files: 555 passed, covering the touched tools, blocks, internal operations, webhook providers andblocks.test.ts.- These checks pass:
check-block-registry.ts origin/stagingcheck:tool-metadata,check:docs,check:integration-catalogcheck:utils,check:test-patterns- explicit-any
- biome
Checklist
- Code follows project style guidelines
- Self-reviewed my changes
- Tests added/updated and passing (new tests pass the
test-auditauthoring gate) - No new warnings introduced
- I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)