Roles and permissions

Organization and project roles, how Spectrace resolves a member's effective role, and which actions each role can perform today.

This page tells you which role to give a teammate and what that role lets them do, based on the checks the server enforces today.

Prerequisites

  • You are an owner or admin of the organization (workspace) or of the project you want to manage members in.

The two role sets

An organization (called a workspace in the UI) is the billing and membership boundary; every user gets a personal organization on first use, with the owner role. Organization roles are:

Org roleMeaning
ownerThe account that created the workspace. The role cannot be changed or transferred through the product.
adminManages members, invites, workspace settings and GitHub App installations.
memberEveryone else.

A project holds requirements. Project roles are owner, admin, qa, developer and viewer; the default for a new project member is developer. Products group projects and reuse the same role set.

How Spectrace resolves your role on a project

When you act on a project, getProjectAccess() computes one effective role from the project's own organization — never from whichever organization you joined first. Precedence:

  1. Your explicit project_members role, if you were added to the project directly.
  2. Otherwise your role on the project's product, if any.
  3. Otherwise your organization role, mapped: org owner → project owner, org admin → project admin, org member → project viewer.

If none of the three exists you have no access. Positive results are cached for 60 seconds; denials are never cached. Changing or removing an org member's role, and adding, re-roling or removing a project member, clear the cache immediately. Accepting an invite does not, so a role granted through an invite can take up to 60 seconds to apply if you already had a cached role on that project.

What each role can do

Only the actions below are role-gated on the server. Some features (cycles, the architecture view and the board layout) also require an explicit project membership row — org-derived access is not enough. Everything else is available to any organization member with access to the project.

Organization actions

ActionWho
Rename the workspaceorg owner, admin
Invite members to the workspaceorg owner, admin
Change a member's role between admin and memberorg owner, admin
Remove a member (not the owner, not yourself)org owner, admin
Install, configure or remove the GitHub Apporg owner, admin

Invited members join as admin or member. Accepting an invite never grants owner, and there is no action to transfer ownership.

Product actions

ActionWho
Create a productany signed-in user (no role check); the creator becomes the product's owner
Attach projects to a product, or move a project between productseffective product owner/admin on the product, and effective project owner/admin on every selected project

Project actions

ActionWho
Update project settingseffective owner, admin
Add, re-role or remove project membersexplicit project owner, admin
Send project invitesexplicit project owner/admin, or org owner/admin
Change or remove the existing owner, or re-role an existing member to ownernobody
Create requirementsanyone with access except an explicit project viewer (an org member whose effective role is viewer by mapping is not blocked)
Reorder requirementsany effective role except viewer
Edit the board layoutexplicit project members other than viewer (org-derived access is not enough)
Satisfy an approval rule whose approver is a roleexplicit project owner and admin always; otherwise the explicit project member whose role equals the rule's role
Delete a projectany member of the project's organization, when that organization is the caller's first one; no role is checked

Nothing on the server rejects owner on a fresh project invite or on adding a member directly; the web UI does not offer it. For role-based approval rules, org-derived roles do not count, and the requirement's creator cannot approve unless the rule allows self-approval.

Deletion is not role-gated today, and it does not consult your effective project access. Any member of the project's organization — including one whose effective role is viewer — can delete it, provided that organization is the one Spectrace resolves as the caller's first workspace. Deletion is immediate, with no grace period.

qa and developer

These two roles select who appears in assignment pickers: the QA list shows qa, admin and owner; the developer list shows developer, admin and owner. Beyond that, no server action restricts test-case approval to qa or implementation-status changes to developer. Treat them as labels for assignment, not as permission boundaries.

Integrations

Connecting or disconnecting GitHub, Linear, Jira and Slack is resolved by user and organization, with no role check. The GitHub App installation flow is the exception (owner or admin, above).

AI agents (MCP)

When an AI agent connects with an API key, its permissions come from the key owner's organization role, intersected with any scopes on the key:

Org rolePermissions
ownereverything
adminread, write and delete projects, requirements and test cases; read and write members, verifications and approvals
memberread projects; read and write requirements, test cases and verifications; read approvals

The role is re-read on every request; a user removed from the organization loses access even if the key still exists. See Connect an agent.

Plans

Role enforcement is identical on every plan. Plan definitions carry a roleBasedAccess flag, but nothing on the server reads it to loosen or tighten the checks above.

Done

A teammate has the intended role when their name appears in the members list with that role and the actions above succeed or fail as the tables say. If an action returns "You don't have permission…", the caller's effective role is below the threshold — check the explicit project role first, then the organization role.