Skip to main content

Variable: SEEDED_BUNDLES

const SEEDED_BUNDLES: object

Defined in: packages/contracts/src/authorization.ts:91

The bundles the setup engine seeds (D1.8, D2.10). Bundles are not editable and no route creates one; bootstrap.apply carries these, and identity stores them.

  • ENTITY_ADMIN runs an organisation: its subjects, persons and grants, and from slice 3 its identifier (D3.7, PO3.8). Admitting the entity was the governing act; holding its own keys is not, so the entity's own administrator creates, publishes and updates the identifier. It holds nothing of the trust tree, so whoever administers an entity cannot admit one.
  • ORGANIZATION_CLIENT is a machine client's, slice 0's authority.
  • TRUST_ANCHOR_ADMIN governs the tree (17 section 4.2): apply, admit, approve publication and read. Delegation narrows, so only a holder can grant it.
  • ACCREDITATION_OFFICER puts an organisation forward and reads the outcome, and may not admit or publish (17: "record a decision", not "publish the statement").
  • SOLE_ADMIN is ENTITY_ADMIN and TRUST_ANCHOR_ADMIN together, for a deployment where one person runs and governs: the local and CI stacks, and 17's small deployment. It exists because identity allows one active grant per person per organisation (3a C1). A production answer file does not grant it; it keeps the duty split with a separate governing account.

Both governance bundles hold subject.read because accreditation.apply reads the organisation through identity.subject.get as the request's own actor (D2.1), and identity checks that permission first.

Each list is spelled out rather than derived from PERMISSION_CODES, so that a code added to the catalogue joins no bundle by accident.

Changing a list here changes seeded data. identity refuses a seeded bundle that exists with other permissions (bootstrap.bundle_differs), and the engine sends every bundle on every run. The four identifier.* codes joined ENTITY_ADMIN and SOLE_ADMIN in slice 3's contracts step, inside the window in which no persistent environment holds the bundles: the Dev host does not exist, and local and CI stacks are reset (pnpm stack:reset). That window closes with the Dev host. The next widening of a seeded bundle needs the bundle-migration decision first.

Type Declaration​

ACCREDITATION_OFFICER​

readonly ACCREDITATION_OFFICER: readonly ["accreditation.apply", "accreditation.read", "entity-statement.read", "subject.read"]

ENTITY_ADMIN​

readonly ENTITY_ADMIN: readonly ["subject.create", "subject.read", "person.create", "person.read", "grant.create", "grant.read", "grant.revoke", "identifier.create", "identifier.read", "identifier.publish", "identifier.update"]

ORGANIZATION_CLIENT​

readonly ORGANIZATION_CLIENT: readonly ["subject.create", "subject.read"]

SOLE_ADMIN​

readonly SOLE_ADMIN: readonly ["subject.create", "subject.read", "person.create", "person.read", "grant.create", "grant.read", "grant.revoke", "accreditation.apply", "accreditation.admit", "accreditation.publish", "accreditation.read", "entity-statement.read", "identifier.create", "identifier.read", "identifier.publish", "identifier.update"]

TRUST_ANCHOR_ADMIN​

readonly TRUST_ANCHOR_ADMIN: readonly ["accreditation.apply", "accreditation.admit", "accreditation.publish", "accreditation.read", "entity-statement.read", "subject.read"]