Regixo docs
For the compliance team·Governance·see the whole journey ↗
Build for your organization

Roles, ownership & governance

Regixo is built for two people who are rarely the same person: the engineer who installs it and the compliance lead who pays and signs. Governing a record is five concrete acts — know who does which job, assign the four per-record roles, change a role and confirm it took, invite a colleague and confirm the email went, and hand over a machine token safely. Each one below tells you the click or command, and how to check it actually happened.

Assign one team, all the way through (the worked example)

Before the reference, staff one record end to end so the roles are concrete. Aurelia Payments has claimed its record; here is who gets which role, and why:

PersonWhat they need to doRoleWhy that role
Maija — compliance lead, claimed the recordConfirm the legal calls and signadminThe invite was sent to her address, and only that address can become the record's admin. Admin confirms and signs, and manages the team and tokens.
A compliance colleagueDraft the RoPA legal fields for Maija to confirmpreparerFills every field — saved “provided by you” — but never confirms, so signing stays a deliberate act.
Procurement leadFill the DORA contract and vendor rowspreparerThose contract facts are theirs; a preparer fills, an approver rules scope.
Internal auditorRead the record onlyviewerReading never needs more than an invite.
Aurelia's engineerPush refreshed metadata from CIa machine token — no roleNot a person login: an ingest-only, company-owned token (step 5), not a seat on the team.

The five sections below are that same set-up, walked in full — the decision inside each act, the click or command, and the honest way to confirm it landed.

Step 1 · Know who installs and who pays

The whole product is shaped around a hand-off, so the roles start there:

Installer ≠ payer Do not assume one login covers both. The engineer never needs an account to install and forward; the account is born on the claim side when the compliance lead first signs in. The two sides meet at the claim link and, for a hosted record, at a machine sync token — not at a shared password.

Step 2 · Assign the four per-record roles

Every paid record has its own team. Roles are per record, and price never moves on how many people you add — there are no seat licences. An admin assigns each person one of four roles from the record's Team card:

RoleCan
viewerReads the record. Reading never needs more than an invite.
preparerFills the RoPA legal fields and DORA cells — each saved as “provided by you”. Cannot confirm or sign.
approverConfirms a field, rules on DORA scope, and signs the record.
adminEverything an approver can, plus manages the team and machine tokens.

Which role for whom — the walk

For each colleague, ask these in order and stop at the first “yes”:

Ask, in order…If yes →
1. Do they only need to read the record?viewer
2. Will they fill fields — RoPA legal calls or DORA rows — but must not sign?preparer (every fill saved “provided by you”)
3. Will they confirm a legal call, rule on DORA scope, or sign the record?approver
4. Will they also manage the team and machine tokens?admin

Give the widest role each person actually needs, and no wider — a preparer who never signs should not be an approver. There are no seat limits, so add everyone who touches the record.

The rules that keep ownership sound:

Step 3 · Change a role — and confirm it took

The signing power is the one that matters: only an approver or an admin can confirm a legal field or sign the record. A preparer can fill every field but never confirms — so the moment you let someone sign is a deliberate role change, not a default. Make it on the record's Team card: pick the person, choose the new role, and Save.

Check it took. A role change is not a quiet badge flip. On Save the portal returns an explicit “Saved” confirmation, the member's row shows the new role, and the change is written to the record's audit trail under who made it and when. If you do not see the confirmation, the change did not land — nothing was saved silently. Read the row and the audit entry, not just the colour of a tag, before you trust that someone can now sign.

A role change never emails the person Promoting an existing member is silent to them by design — it sends no email (that is reserved for a genuinely new member; see Step 4). So the Saved confirmation and the audit entry are your only proof the change took. If the goal is to tell them, message them yourself.
The branch that trips people — the last admin can't be removed A record is never left without an owner, so the last admin cannot be demoted or removed. Try it and the change is refused; the record keeps its admin. To hand ownership over — someone is leaving, or you are stepping back — do it in this order: 1. promote a successor to admin first (the record now has two); 2. then demote or remove the outgoing admin. Never the other way round: there is no step that leaves zero admins, by design. Removing a member ends their sessions immediately — access stops at the change, not at the next login.

DORA teams

13 of DORA's 15 tables are vendor and contract facts a data map cannot see — they live with the people who own the paperwork. In practice that is procurement (who the ICT third parties are and what they cost), legal (the contracts, terms and exit clauses) and ICT-risk (criticality, substitutability). Give those people preparer or approver roles so they can fill the needs-you tables directly. Two ways in:

What the map auto-starts versus what a person supplies is set out in The DORA register.

Step 4 · Invite a colleague — and confirm the email went

To bring a new person onto the record, an admin adds them by email on the Team card, picks a role, and chooses Send invite. Adding a genuinely new member sends them one email — “You were added to a compliance record on Regixo” — with the claim link and a one-line summary of what each role can do. They open the link and sign in with that same address (Step 5 below covers the sign-in itself).

Check the email went. The durable truth is the roster: the moment you Save, the person's row appears with their role, and the add is written to the audit trail. The email is a courtesy on top of that — best-effort, so it can lag. Confirm it landed the honest way: the new row is in the roster, the add is in the audit log, and — the only real proof of delivery — the invitee tells you they got it. If they didn't, re-send from the Team card; the roster row stands either way.

Invite versus role change Send invite emails only when the address is new to this record. Changing an existing member's role (Step 3) sends nothing — it is not an invite. If you expected an email and none arrived, check first whether that person was already on the team.

How people sign in

Two paths to a verified identity, and Regixo records which one was used — honestly, as email-verified versus sso — because the assurance travels with a signature.

Magic link
The default that births the account. The claim page emails a one-time link — it works once, for 15 minutes, and shows a confirm page first (so a link-scanner can't consume it). Clicking through creates the user and a session. Assurance is recorded as email-verified.
Company SSO (OIDC)
A generic OpenID Connect client for Okta, Microsoft Entra and Google Workspace, configured per record by an admin:
say

“Require SSO for everyone on our Regixo portal account, using our Okta tenant.”

Your agent fills in everything except the token — you put that in .env yourself.

Show the commandHide the commandShow the sentenceHide the sentence
run
$ regixo admin sso set --claim <clm_…> \
    --issuer https://your-org.okta.com \
    --client-id <id> --client-secret-env OKTA_SECRET --require
The client secret is passed by env-var name and stored sealed — never printed. --require disables magic-link sign-in for that record, so everyone comes through your IdP. Assurance is recorded as sso.
SSO is wired, not yet IdP-validated The OIDC client is built and offline-tested. The run against a real Okta / Entra / Google Workspace tenant is a launch gate, not yet done — like the hosted portal itself, which is not yet hosted. Plan for SSO; don't assume the production validation has already happened.

Step 5 · Mint and hand over a machine token safely

A hosted record stays current by having a machine push refreshed metadata. That machine authenticates with a sync token, not a person's login. An admin generates one from the “Connect a machine” card on the claim page (its own annex, beside “Your team”); the portal shows it once, right there, as the env var to set — that one-time reveal is your “generated” confirmation. Copy it now; you cannot see it again.

shown once — set it in the environment
REGIXO_SYNC_TOKEN=rgx_sync_9f2c…

It is a secret, so it moves the way every secret does:

  1. Generate it where it will run, if you can. The engineer who owns the CI runner or the scheduled machine is best placed to generate the token and drop it straight into that machine's environment — the token never has to travel.
  2. If someone else must hand it over, use a password manager. Put the one-time value in a shared vault entry and give the engineer access to that entry. Never paste a token into a chat message or an email — send the vault entry, not the secret.
  3. The engineer sets it as REGIXO_SYNC_TOKEN. On the machine, in .env (or a CI secret), never in regixo.yml. A paired regixo watch then pushes refreshed metadata on its schedule.

Check it landed. The admin lists the record's tokens (regixo admin machines, or the “Connect a machine” card) and sees the new machine; after the engineer's first scheduled scan, the record's “what changed” feed updates — proof the pairing works, with no one re-forwarding a draft.

Company-owned, not personal
It belongs to the record, not to whoever made it, so it survives staff turnover. It is not a login and not the licence key.
Ingest-only
It can push metadata-only drafts and nothing else — it can never unlock, sign or export. A leaked token can add to the map; it can't touch the legal record.
Revocable per machine
List and revoke tokens individually (regixo admin machines <token> / admin machine rm). Kill one CI runner's token without disturbing the others. Those two, and every other regixo admin subcommand, are listed in the operator surface.
In the environment, never the file Set REGIXO_SYNC_TOKEN as an environment variable (or a CI secret) — never in regixo.yml. It's a credential; it follows the same rule as every other secret.

Governance practice

Roles decide who can act; governance is the org agreement on how they do. A few practices keep an org catalog defensible:

How you know the record is governed

All five acts have landed when: every person who touches the record has exactly the role they need on the Team card; each role change you made showed its Saved confirmation and an audit entry; every genuinely new member's row is in the roster (and they've told you the invite arrived); and the machine that keeps a hosted record fed shows up under the record's tokens, with its REGIXO_SYNC_TOKEN set in the environment — never in regixo.yml.

REGIXO — documentation · the engineer installs, the compliance lead signs · Command reference