Connecting a tool

Rules that apply to every connector. Read this once and the seven per-connector pages become setup instructions rather than concepts.

Available connectors#

The seven connectors
ConnectorYou provideDelivery
SlackAn OAuth authorisationPush
GitHubAn app installation on your organisationPush
GitLabA group path and a group access token with the Owner rolePoll, 10 minutes
OktaYour org domain and an Okta API Services appPush
Google WorkspaceDomain-wide delegation and an admin to impersonatePoll, 10 minutes
Microsoft Entra IDAdmin consent from a tenant administratorPoll, 10 minutes
AWSA cross-account IAM rolePoll, 10 minutes

You never register an application yourself. Governax operates one Slack app, one GitHub App, one Google service account and one Microsoft Entra app registration, so your side of the setup is authorising ours rather than building your own. Okta and GitLab take a read-only token you create; AWS takes a role you create.

One connection, one entity#

A connector belongs to exactly one entity, and its events land only in that entity's ledger. An external account, meaning one Slack workspace, GitHub organisation, GitLab group, Okta domain, Google domain, Microsoft tenant or AWS account, can be connected to only one entity at a time across all of Governax.

Both refusals return 409 WORKSPACE_ALREADY_CONNECTED
SituationWhat to do
The account is connected to a different organisationRefused regardless of status. Contact support if this is unexpected, for example after a trial under another account.
The account is connected to another entity in your organisationDisconnect it there first, then connect it here.

How credentials are stored#

What each connector stores
ConnectorStoredEncrypted at rest
SlackAn access tokenYes, AES-256-GCM
OktaYour app's client ID, no secretNot applicable
GitLabYour group access tokenYes, AES-256-GCM
GitHubAn installation id, no tokenNot applicable
Google WorkspaceThe admin email to impersonateNot applicable
Microsoft Entra IDYour tenant id, no tokenNot applicable
AWSA role ARNNot applicable

Only Slack, Okta and GitLab hold a long-lived secret. The other four are designed so that no reusable credential is held: GitHub and Entra ID tokens are minted per operation from Governax's own app registrations, Google access is authorised on your side and can be withdrawn there, and AWS access is a role your account grants and can revoke.

What happens when you connect#

  • The credential is verified before the connection is saved. A connector that cannot actually read is reported at connect time rather than failing silently later.
  • A baseline snapshot is taken. Governax records who already has access, so the ledger has a starting position rather than only recording changes from now on. These arrive as access.baseline_observed events.
  • The baseline never blocks the connection. If the snapshot fails, the connection still succeeds and events still flow.

Reconnecting the same account reuses the same connection. Baseline events carry deterministic identifiers, so re-running one never duplicates history, and the polled connectors keep their position so a reconnect does not re-import everything.

What disconnecting does#

Disconnecting stops ingestion. It never removes anything already recorded: the ledger is append-only, so every event captured while the connector was live stays exactly where it is, and remains verifiable.

What each connector does on disconnect
ConnectorAction taken on the tool's side
SlackRevokes the token, and erases the stored copy
GitHubUninstalls the app from your organisation
OktaDeactivates and deletes the Event Hook it created
GitLabNothing. Delete the group access token in GitLab to fully revoke.
Google WorkspaceNothing. Remove the delegation in your Admin console to fully revoke.
Microsoft Entra IDNothing. Remove Governax under Enterprise applications in the Entra admin centre to fully revoke.
AWSNothing. Delete the IAM role in your account to fully revoke.

A tool can also disconnect itself. Uninstalling the Slack app or the GitHub App from that tool records integration.disconnected_remotely and marks the connection dead, so the interface does not keep showing a healthy badge for something that stopped working.

Connection health#

Each connection surfaces:

  • Status, connected or disconnected
  • Which external account it is bound to
  • When it was connected, and by whom
  • The time of the last event received
  • The last error, if there was one

One shared dependency worth knowing about for anyone reviewing architecture: all seven connectors depend on the same queue and scheduling infrastructure. Details of the pipeline are in How events reach the ledger.