Skip to content

Explain inline link missing on integration sync failure (INTEGRATION_SYNC_FAILED) messages #96422

Description

@melvin-bot

Problem

Export/sync failure system messages (e.g. failed to export this report to NetSuite ("NS0196 Sync Error: …")) show the right-click "Explain" option but not the inline "Explain" link on hover. Since most users discover Explain via the inline link rather than the context menu, this affordance is effectively hidden for these messages even though the reasoning payload is present.

Root cause

The two affordances are gated differently:

  • Right-click "Explain"ContextMenuActions.tsx gates the entry solely on hasReasoning(reportAction) with no per-type whitelist, so it fires for any action carrying a reasoning payload.
  • Inline "Explain" link — only renders when the action's render component explicitly wraps its message in <ReportActionItemMessageWithExplain> (e.g. ExportIntegration for the success path EXPORTED_TO_INTEGRATION).

The failure path routes to IntegrationSyncFailedMessage.tsx, which renders plain muted text via ReportActionItemBasicMessage + RenderHTML with no ReportActionItemMessageWithExplain wrapper and no hasReasoning check:

return (
    <ReportActionItemBasicMessage message="">
        <RenderHTML html={`<comment><muted-text>${getIntegrationSyncFailedMessage(translate, action, policyID, isTryNewDotNVPDismissed)}</muted-text></comment>`} />
    </ReportActionItemBasicMessage>
);

This is not a regression — the failure/sync path was never whitelisted for the inline affordance. The 2026-04-29 auto-export commit (281da4f7) only wired the inline Explain into ExportIntegration (the success path).

Proposed fix

In IntegrationSyncFailedMessage.tsx, wrap the message in ReportActionItemMessageWithExplain when hasReasoning(action) is true (mirroring ExportIntegration.tsx), falling back to the current ReportActionItemBasicMessage / RenderHTML rendering when there's no reasoning. This turns on the inline Explain link for NetSuite/QBO sync-failure messages so users get it as a first-class hover action.

Relevant files

Reported in Slack.

Metadata

Metadata

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions