Integrations

What this screen is for

The Integrations tab connects Fenwave to third-party services your teams use outside the platform. Today that means Jira and Slack.

Unlike CI/CD, which connects the tools that build and deploy, these integrations enrich what happens around a deployment — issue links, tracking and notifications rather than execution.

Each integration is configured once, platform-wide. One Jira instance, one Slack workspace, shared by every plugin that needs them.

Before you start

To do this You need
See the tab platform-settings.project.read
Configure or disable an integration platform-settings.project.update

Integrations reuse the project permissions rather than having their own family. If you can edit projects, you can configure integrations.

Opening it

  1. Settings › Development
  2. Select the Integrations tab.

The interface

📸 Screenshot Placeholder: The Integrations tab with the Jira and Slack rows. Mark: (1) the integration name, (2) the status chip reading Connected, Failing, or Disabled, (3) the configure action.

# Control What it does When you’d use it
1 Integration name and description What the integration does Deciding whether you need it
2 Status chip Connected, Failing, or Disabled Triage at a glance
3 Configure Opens the credentials dialog Setting up, or fixing a failure

What the statuses mean

Status Means Do
Connected Credentials were verified when saved and are working Nothing
Failing Configured, but the service is not responding as expected Reconfigure — usually expired credentials
Disabled Deliberately switched off, or never configured Configure it, if you want it

Credentials are verified at save time. A save that succeeds tells you the credentials worked at that moment — which is why Failing appears later rather than at setup.

Walkthroughs

Connect Jira

Requires platform-settings.project.update.

  1. Settings › Development › Integrations.
  2. Open the Jira row and configure it.
  3. Enter the connection details and credentials.
  4. Save. The confirmation states explicitly that the credentials were verified; if it does not, they were not.
  5. Confirm the status chip reads Connected.

Connect Slack

Requires platform-settings.project.update.

Slack posts platform notifications — deployments finishing on dev, staging and production, and anything else a plugin chooses to announce.

Do the Slack-side setup first, at https://api.slack.com/apps:

  1. Create a Slack app for your workspace.
  2. Under OAuth & Permissions, add the chat:write bot scope, then install the app to the workspace.
  3. Copy the Bot User OAuth Token — it starts with xoxb-.
  4. Invite the app to every channel you plan to use, by typing /invite @your-app in each one.

Step 4 is the one people skip. chat:write lets the app post, but Slack still refuses if the app is not a member of the channel — and because notifications fail quietly, the symptom is silence rather than an error.

Then in Fenwave:

  1. Settings › Development › Integrations.
  2. Open the Slack row and configure it.
  3. Paste the bot token and set the channels.
  4. Save. The token is verified against Slack as part of saving.
  5. Confirm the status chip reads Connected.

Faster: create the app from a manifest

Slack’s Create New App dialog offers From an app manifest. Pasting this replaces steps 1 and 2 and avoids the two settings people miss — the bot user, without which Slack never issues a token at all, and token rotation, which would make notifications stop working a few hours after setup.

_metadata:
  major_version: 2
  minor_version: 1

display_information:
  name: Fenwave
  description: Deployment and platform notifications from your Fenwave IDP
  background_color: "#1a1d23"

features:
  bot_user:
    display_name: Fenwave
    always_online: true

oauth_config:
  scopes:
    bot:
      - chat:write

settings:
  org_deploy_enabled: false
  socket_mode_enabled: false
  token_rotation_enabled: false

You still need to install the app, copy the token, and invite it to your channels.

Choosing channels

Field Used for
Default Anything with no environment channel. Required.
Dev Branch environments
Staging Staging deployments
Production Production deployments

Leave the environment fields blank to send everything to the default channel. Fill them in when different audiences care about different environments — production announcements in a channel the whole team watches, dev churn in one they can mute.

Why a bot token and not a webhook URL

A Slack incoming webhook is permanently bound to one channel. Routing dev, staging and production to different places requires a bot token.

Disable an integration

Requires platform-settings.project.update.

Disable it from the same dialog. The configuration is kept, so re-enabling later does not mean re-entering everything.

Scenario

Jira links stopped resolving after a credential rotation.

Nobody changed anything in Fenwave, which is the tell.

  1. Settings › Development › Integrations.
  2. The Jira status chip reads Failing — so it is configured, and the problem is the credentials rather than the setup.
  3. Open the configuration and enter the new credentials.
  4. Save. Verification runs as part of saving, so a successful save is your proof.
  5. Confirm the chip returns to Connected.

The general lesson: Failing means “was working, no longer is”, and points at credentials. Disabled means “never set up”, and points at configuration. Reading the chip correctly saves you starting in the wrong place.

Slack says Connected, but no notifications arrive.

The chip is telling the truth, and it is not the whole story. Connected means the token was verified. It says nothing about the channels — those are only tested when a real notification is sent.

Two causes, in order of likelihood:

  1. The app was never invited to the channel. Open the channel in Slack and type /invite @your-app. This is by far the most common cause.
  2. The channel name is wrong — a typo, a renamed channel, or a private channel the app cannot see.

Either way the failure is recorded in the backend logs rather than on screen, because a notification must never fail the deployment that triggered it. Look for not_in_channel (cause 1) or channel_not_found (cause 2).

The general lesson: a verified integration is not the same as a working delivery path. Verification proves the credential; only a real notification proves the route.

When it doesn’t work

Symptom Cause How to check Fix
Status reads Failing Credentials expired or the service is unreachable Reconfigure and save Enter fresh credentials; verification runs on save
Save is rejected Credentials did not verify The error in the dialog Correct them — nothing is stored on a failed verification
Status reads Disabled unexpectedly Someone disabled it, or it was never configured The configuration dialog Re-enable; stored settings are kept
Cannot configure anything Missing platform-settings.project.update Access Explorer Ask for a role granting it
Slack is Connected but silent The app is not in the channel Backend logs for not_in_channel /invite @your-app in each configured channel
Slack notifications go to one channel Environment channels are blank The Slack configuration dialog Fill in the Dev, Staging and Production fields
The Slack token is rejected on save It is a user token, not a bot token The error in the dialog Use the Bot User OAuth Token — it starts with xoxb-
The integration you want is not listed Only Jira and Slack are available today Not configurable; nothing to enable

Next

  • CI/CD — the tools that build and deploy
  • Projects — what these integrations attach to