Connecting a tool
Rules that apply to every connector. Read this once and the five per-connector pages become setup instructions rather than concepts.
Available connectors#
You never register an application yourself. Governax operates one Slack app, one GitHub App and one Google service account, so your side of the setup is authorising ours rather than building your own.
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, Okta domain, Google domain or AWS account, can be connected to only one entity at a time across all of Governax.
How credentials are stored#
Only Slack and Okta require a long-lived secret. The other three are designed so that no reusable credential is held: GitHub tokens are minted per operation, 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_observedevents. - 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.
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 five connectors depend on the same queue and scheduling infrastructure. Details of the pipeline are in How events reach the ledger.