v0.2.0¶
Release Date: 2026-10-13
Highlights¶
- Reconnect.
service.Reconnectreplaces a connection's credential without creating a new connection, so the features bound to it keep working. - Bindings through the service.
Bindingslists what depends on a connection, andBindandUnbindrecord it, so a disconnect can show what it would stop. - No breaking changes.
Reconnect¶
A token expires, is revoked or is rotated. Reconnect takes the new
credential, validates it with the provider before storing anything, and
writes it as the next version:
conn, err := svc.Reconnect(ctx, service.ReconnectInput{
Owner: owner, Actor: actor, ID: id,
Fields: map[string]connectforge.Secret{"token": connectforge.SecretString(newToken)},
})
- A credential the provider rejects changes nothing.
- A credential for a different account is refused with
ErrAccountMismatch. Connecting another account is a new connection, so a feature never silently reads someone else's data. - On success the connection is
connectedwith fresh health, and bindings are untouched. - It recovers a connection whose sealed credential can no longer be read, such as after a lost key ring, because the new credential is sealed without opening the old one.
- A
disconnectedconnection can be reconnected; arevokedone cannot. - It requires
manage, and records acredential.replacedevent.
Bindings¶
| Operation | Requires | Behaviour |
|---|---|---|
Bindings |
view |
Lists what depends on the connection |
Bind |
use |
Records that a consumer depends on it for a purpose; idempotent |
Unbind |
use |
Removes a binding; not an error when none exists |
Each change records a binding.changed event. Grants stay with the host's
authorization.
Installation¶
Known limitations¶
- A disconnect does not require acknowledging bindings. The list is
available; requiring it is planned (
RMI-CONNECTFORGE-018). - Everything in the v0.1.0 limitations still applies: static API tokens only, no scheduled validation, no HTTP API of its own.