mastra-ai/mastra · error
App manifest update failed: ${errorDetails}
Error message
App manifest update failed: ${errorDetails} What it means
updateApp pushes a new manifest to Slack via the app manifest API. On ok:false it builds errorDetails from data.error plus any field-level validation errors (pointer/message pairs) and throws.
Source
Thrown at channels/slack/src/client.ts:258
'Content-Type': 'application/json',
Authorization: `Bearer ${this.#token}`,
},
body: JSON.stringify({ app_id: appId, manifest }),
signal: AbortSignal.timeout(SLACK_API_TIMEOUT_MS),
});
const data = (await response.json()) as {
ok: boolean;
error?: string;
errors?: Array<{ message: string; pointer: string }>;
};
if (!data.ok) {
let errorDetails = data.error ?? 'unknown_error';
if (data.errors?.length) {
errorDetails += ': ' + data.errors.map(e => `${e.pointer}: ${e.message}`).join(', ');
}
throw new Error(`App manifest update failed: ${errorDetails}`);
}
}
/**
* Set the app icon via undocumented apps.icon.set API.
*/
async setAppIcon(appId: string, imageData: ArrayBuffer): Promise<void> {
await this.rotateToken();
const formData = new FormData();
formData.append('app_id', appId);
formData.append('image', new Blob([imageData], { type: 'image/png' }), 'icon.png');
const response = await fetch(`${SLACK_API_BASE}/apps.icon.set`, {
method: 'POST',
headers: {
Authorization: `Bearer ${this.#token}`,
},View on GitHub (pinned to 75dd419e61)
Solutions
- Read errorDetails — fix the manifest fields identified by the pointer/message pairs in your channel configuration
- Refresh app configuration tokens from https://api.slack.com/apps and retry the update
- Align your stored channel config with a manifest that Slack accepts, then let drift check re-run
Example fix
// before
manifest.settings.event_subscriptions = { request_url: 'http://bad' }; // validation error
// after
manifest.settings.event_subscriptions = { request_url: 'https://myapp.example.com/api/slack/events' }; Defensive patterns
Strategy: validation
Validate before calling
function manifestUpdateSafe(m: SlackAppManifest): boolean {
return !!(m.display_information?.name && m.settings &&
(!m.oauth_config?.redirect_urls || m.oauth_config.redirect_urls.every(u => u.startsWith('https://'))));
}
if (!manifestUpdateSafe(manifest)) throw new Error('manifest will fail Slack validation'); Try / catch
try {
await client.updateApp(appId, manifest);
} catch (e) {
const msg = (e as Error).message;
if (msg.startsWith('App manifest update failed:')) {
// parse pointer/message details from msg, fix config, retry
} else throw e;
} Prevention
- Fix manifest fields named in the error's pointer/message details
- Refresh app configuration tokens with update permissions
- Keep stored channel config aligned with a Slack-valid manifest
- Roll out manifest changes incrementally
When it happens
Trigger: updateApp() (invoked from config drift checks like #checkConfigDrift) receives { ok: false } from Slack — manifest validation failure, invalid/insufficient app config token, or unknown error.
Common situations: Config drift reconciliation pushing a manifest Slack rejects (invalid field values); app config token lacking update permissions; editing channel config to values Slack disallows.
Related errors
- App creation failed: ${errorDetails}
- connect({ id, name }): "name" is required when connecting wi
- Agent "${agentId}" not found
- No agent or agent controller found with id "${agentId}"
- ClaudeSDKAgent resumeData must include sessionId or continue
AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30).
Data as JSON: /api/errors/8113fc7474d2be2b.
Report an issue: GitHub.