Namespace id.entity.core@2.2.0

Compatible with Concerto versions ^3.0.0. Has 57 declarations.

Built on this namespace - the text published at templates.entity.id that these types drive:

Concerto JSON AST PlantUML XML Schema Typescript C# OData JSON Schema GraphQL Java Go Avro Markdown OpenAPI Protobuf Mermaid

Declared Types

      
      import id.entity.core@2.2.0.CapacityScope from /core@2.2.0.cto
      import id.entity.core@2.2.0.SubjectKind from /core@2.2.0.cto
      import id.entity.core@2.2.0.DisclosureLevel from /core@2.2.0.cto
      import id.entity.core@2.2.0.EthAddress from /core@2.2.0.cto
      import id.entity.core@2.2.0.Cardinality from /core@2.2.0.cto
      import id.entity.core@2.2.0.Capacity from /core@2.2.0.cto
      import id.entity.core@2.2.0.Constituent from /core@2.2.0.cto
      import id.entity.core@2.2.0.VotingBasis from /core@2.2.0.cto
      import id.entity.core@2.2.0.FractionThreshold from /core@2.2.0.cto
      import id.entity.core@2.2.0.DeathIncapacityRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.EntityDissolvedOnDeath from /core@2.2.0.cto
      import id.entity.core@2.2.0.InterestPassesToSuccessor from /core@2.2.0.cto
      import id.entity.core@2.2.0.MembershipLapses from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomDeathIncapacityRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.ActRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.AnyConstituentActs from /core@2.2.0.cto
      import id.entity.core@2.2.0.AllConstituentsAct from /core@2.2.0.cto
      import id.entity.core@2.2.0.RoleActs from /core@2.2.0.cto
      import id.entity.core@2.2.0.FractionActs from /core@2.2.0.cto
      import id.entity.core@2.2.0.AnyOfActRules from /core@2.2.0.cto
      import id.entity.core@2.2.0.ThresholdActs from /core@2.2.0.cto
      import id.entity.core@2.2.0.ScopedActRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomActRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.DecisionRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.AllConstituentsDecide from /core@2.2.0.cto
      import id.entity.core@2.2.0.FractionDecides from /core@2.2.0.cto
      import id.entity.core@2.2.0.RoleDecides from /core@2.2.0.cto
      import id.entity.core@2.2.0.ThresholdDecides from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomDecisionRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.AmendmentRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.AllConstituentsAmend from /core@2.2.0.cto
      import id.entity.core@2.2.0.FractionAmends from /core@2.2.0.cto
      import id.entity.core@2.2.0.RoleAmends from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomAmendmentRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.Interpreter from /core@2.2.0.cto
      import id.entity.core@2.2.0.ConstituentsInterpret from /core@2.2.0.cto
      import id.entity.core@2.2.0.ArbitratorInterprets from /core@2.2.0.cto
      import id.entity.core@2.2.0.CourtInterprets from /core@2.2.0.cto
      import id.entity.core@2.2.0.ExtensionTribunalInterprets from /core@2.2.0.cto
      import id.entity.core@2.2.0.TieredInterpreter from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomInterpreter from /core@2.2.0.cto
      import id.entity.core@2.2.0.AnswerabilityRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.NotPersonallyAnswerable from /core@2.2.0.cto
      import id.entity.core@2.2.0.LimitedToContribution from /core@2.2.0.cto
      import id.entity.core@2.2.0.JointAndSeveral from /core@2.2.0.cto
      import id.entity.core@2.2.0.RoleAnswers from /core@2.2.0.cto
      import id.entity.core@2.2.0.PerExtensionRegime from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomAnswerabilityRule from /core@2.2.0.cto
      import id.entity.core@2.2.0.Term from /core@2.2.0.cto
      import id.entity.core@2.2.0.PerpetualTerm from /core@2.2.0.cto
      import id.entity.core@2.2.0.FixedEndDateTerm from /core@2.2.0.cto
      import id.entity.core@2.2.0.FixedYearsTerm from /core@2.2.0.cto
      import id.entity.core@2.2.0.UntilEventTerm from /core@2.2.0.cto
      import id.entity.core@2.2.0.CustomTerm from /core@2.2.0.cto
      import id.entity.core@2.2.0.Extension from /core@2.2.0.cto
      import id.entity.core@2.2.0.Adoption from /core@2.2.0.cto
      import id.entity.core@2.2.0.Constitution from /core@2.2.0.cto
      
      

Dependencies

  • None

Source

    /*
 * id.entity.core - The Irreducible Constitution, Core v2.2
 *
 * Models Core v2.2 (6 articles, 19 clauses) as typed data: the Entity, its
 * Constituents, their Capacities, and the six bracketed answers as typed
 * choices - abstract concepts with concrete variants, never free strings.
 *
 * Source of truth: vault universal-constitution/v2.2-reduction.md (2026-09-13).
 * Capacity scopes, cardinality and disclosure absorbed from
 * RegistryChain/RegistrarChain-ZodSchema (constituent-type.ts, enums.ts).
 *
 * provenance:
 *   source: universal-constitution/v2.2-reduction.md@2026-09-13
 *   licence: Apache-2.0
 */
concerto version "^3.0.0"
namespace id.entity.core@2.2.0

// ---------------------------------------------------------------------------
// Shared vocabulary (absorbed from RegistrarChain-ZodSchema)
// ---------------------------------------------------------------------------

/**
 * What a recorded capacity operates on.
 * Absorbed verbatim from ZodSchema CapacityScopeSchema.
 */
enum CapacityScope {
  o ON_ENTITY
  o ON_TREASURY
  o ON_CONSTITUTION
  o ON_CONSTITUENTS
  o ON_ATTESTATIONS
}

/**
 * What kind of subject a Constituent is.
 * Absorbed from ZodSchema SubjectKindSchema.
 */
enum SubjectKind {
  o NATURAL
  o LEGAL
  o WALLET
  o AGENT
  o ANONYMOUS
}

/**
 * Absorbed from ZodSchema DisclosureLevelSchema.
 */
enum DisclosureLevel {
  o PUBLIC
  o REGISTRAR_ONLY
  o ANONYMOUS
}

/**
 * An EVM address. Shared scalar - one regex, used wherever an address
 * field appears (constituents, token contracts, operators of record).
 */
scalar EthAddress extends String regex=/^0x[0-9a-fA-F]{40}$/

/**
 * How many of something is allowed. max absent means unlimited
 * (ZodSchema models this as max: number | "unlimited").
 */
concept Cardinality {
  o Integer min range=[0,]
  o Integer max range=[1,] optional
}

/**
 * A recorded capacity held by a Constituent (clause 2.1: "each holding only
 * the capacities recorded beside their name"). Shape absorbed from
 * ZodSchema CapacitySchema.
 */
concept Capacity {
  o String name
  o CapacityScope scope
  o Boolean requiresQuorum default=false
  o Boolean delegatable default=false
  o String description optional
}

/**
 * A person named in the register (Article II). The register controls over
 * any other document, and over any key (2.1).
 */
concept Constituent {
  o String name
  o SubjectKind subjectKind
  o String[] roles optional
  o Capacity[] capacities
  o EthAddress address optional
  o DisclosureLevel disclosure default="PUBLIC"
}

// ---------------------------------------------------------------------------
// The six bracketed answers as typed choices.
// Each is an abstract concept with concrete variants. A Custom* escape
// variant exists only where external reality may genuinely outrun the
// variants; none of the eight known entity types needs one.
// ---------------------------------------------------------------------------

/**
 * Voting basis for fraction thresholds (who or what is counted).
 */
enum VotingBasis {
  o ALL_CONSTITUENTS
  o CONSTITUENTS_VOTING
  o CONSTITUENTS_PRESENT
  o UNITS
}

/**
 * A fraction threshold, kept as exact integers (2/3, not 0.6667).
 * moreThan=true means strictly more than the fraction (a majority);
 * moreThan=false means at least the fraction (a two-thirds quorum).
 */
concept FractionThreshold {
  o Integer numerator range=[1,]
  o Integer denominator range=[1,]
  o VotingBasis basis
  o Boolean moreThan default=false
}

// --- 2.5 death or incapacity ---

/**
 * Clause 2.5: "On the death or incapacity of a [Constituent], [rule]."
 */
abstract concept DeathIncapacityRule {
}

/** The Entity is dissolved (marriage). */
concept EntityDissolvedOnDeath extends DeathIncapacityRule {
}

/**
 * Capacities lapse; the interest passes to the successor in title, who
 * holds it without capacity until admitted (company, startup, quota).
 */
concept InterestPassesToSuccessor extends DeathIncapacityRule {
  o Boolean successorHoldsWithoutCapacityUntilAdmitted default=true
}

/**
 * Membership simply lapses (association, dao); for a polity, citizenship
 * lapses and any office is vacated (officesVacated=true).
 */
concept MembershipLapses extends DeathIncapacityRule {
  o Boolean officesVacated default=false
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomDeathIncapacityRule extends DeathIncapacityRule {
  o String text
}

// --- 3.1 act rule ---

/**
 * Clause 3.1: "The Entity is bound toward third parties when [act rule]
 * acts in its name."
 */
abstract concept ActRule {
}

/** Any Constituent - optionally only those holding a named capacity. */
concept AnyConstituentActs extends ActRule {
  o String requiredCapacity optional
}

/** All Constituents acting together. */
concept AllConstituentsAct extends ActRule {
}

/** A named role or organ - "the Council, within the powers delegated to it". */
concept RoleActs extends ActRule {
  o String role
  o String withinDelegatedPowers optional
}

/** A fraction of Constituents (or units) acting together binds the Entity. */
concept FractionActs extends ActRule {
  o FractionThreshold threshold
}

/** Any one of the listed rules suffices - "any Manager, or a majority of the Members". */
concept AnyOfActRules extends ActRule {
  o ActRule[] rules
}

/** N of M signers (multisig-shaped). */
concept ThresholdActs extends ActRule {
  o Integer count range=[1,]
  o Integer of range=[1,] optional
}

/**
 * A dual-scope rule: one rule for ordinary affairs, a stricter rule for
 * named extraordinary matters. Marriage: "either Spouse in the ordinary
 * affairs of the household, both together in any disposition of common
 * property."
 */
concept ScopedActRule extends ActRule {
  o ActRule ordinary
  o ActRule extraordinary
  o String extraordinaryMatters
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomActRule extends ActRule {
  o String text
}

// --- generic decision rules ---

/**
 * A generic approval rule: who must approve for a decision to take
 * effect. Extensions reference this wherever they need an approval body
 * (E1 distributions and transfer consent, E3 admission and expulsion,
 * E7 elections). The clause-3.2 AmendmentRule specialises it below.
 */
abstract concept DecisionRule {
}

/** Every Constituent must approve. */
concept AllConstituentsDecide extends DecisionRule {
}

/**
 * A fraction threshold approves - majority of units, two-thirds of
 * citizens voting, two-thirds of members present.
 */
concept FractionDecides extends DecisionRule {
  o FractionThreshold threshold
}

/** A named role or organ approves (boards, councils). */
concept RoleDecides extends DecisionRule {
  o String role
}

/** N of M approvers (multisig-shaped). */
concept ThresholdDecides extends DecisionRule {
  o Integer count range=[1,]
  o Integer of range=[1,] optional
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomDecisionRule extends DecisionRule {
  o String text
}

// --- 3.2 amendment rule ---

/**
 * Clause 3.2: "This Constitution, and anything recorded under it, changes
 * when [amendment rule] approves the change." The clause-3.2-specific
 * specialisation of DecisionRule - only these variants may sit in the
 * Constitution's amendmentRule slot.
 */
abstract concept AmendmentRule extends DecisionRule {
}

/** Every Constituent must approve (marriage: both Spouses). */
concept AllConstituentsAmend extends AmendmentRule {
}

/**
 * A fraction threshold approves - majority of units, two-thirds of
 * citizens voting, two-thirds of members present.
 */
concept FractionAmends extends AmendmentRule {
  o FractionThreshold threshold
}

/** A named role or organ approves (rare; boards, councils). */
concept RoleAmends extends AmendmentRule {
  o String role
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomAmendmentRule extends AmendmentRule {
  o String text
}

// --- 3.3 interpreter ---

/**
 * Clause 3.3: "A question about the meaning or application of this
 * Constitution is decided by [interpreter]."
 */
abstract concept Interpreter {
}

/** The Constituents themselves, under the rule in 3.2. */
concept ConstituentsInterpret extends Interpreter {
}

/** An arbitrator appointed under stated rules. */
concept ArbitratorInterprets extends Interpreter {
  o String appointmentRules optional
}

/** A named court or forum - "the family court of the place of celebration". */
concept CourtInterprets extends Interpreter {
  o String forum
}

/** A tribunal constituted under a named Extension. */
concept ExtensionTribunalInterprets extends Interpreter {
  o String extensionId regex=/^E[1-9][0-9]*$/
}

/**
 * A tiered interpreter: first limb decides; failing agreement the
 * fallback decides (ACME: the Members by majority, failing agreement the
 * arbitrator recorded in the register).
 */
concept TieredInterpreter extends Interpreter {
  o Interpreter first
  o Interpreter fallback
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomInterpreter extends Interpreter {
  o String text
}

// --- 4.2 answerability ---

/**
 * Clause 4.2: "For the obligations of the Entity, [answerability rule]."
 */
abstract concept AnswerabilityRule {
}

/** The Constituents are not personally answerable. */
concept NotPersonallyAnswerable extends AnswerabilityRule {
}

/**
 * Each Constituent answers only to the extent of what they have
 * contributed or agreed to contribute (quota companies; association
 * subscriptions due - name the limit in limitDescription).
 */
concept LimitedToContribution extends AnswerabilityRule {
  o String limitDescription optional
}

/** The Constituents answer jointly and severally. */
concept JointAndSeveral extends AnswerabilityRule {
}

/** A named role answers (an agent's Operator of Record). */
concept RoleAnswers extends AnswerabilityRule {
  o String role
}

/** The Constituents answer as the regime in a named Extension provides. */
concept PerExtensionRegime extends AnswerabilityRule {
  o String extensionId regex=/^E[1-9][0-9]*$/
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomAnswerabilityRule extends AnswerabilityRule {
  o String text
}

// --- 6.1 term ---

/**
 * Clause 6.1: "The Entity exists [term], and is dissolved when that term
 * ends or when an amendment declares it ended."
 */
abstract concept Term {
}

/** The Entity exists perpetually, until dissolved by amendment. */
concept PerpetualTerm extends Term {
}

/** The Entity exists until a fixed end date. */
concept FixedEndDateTerm extends Term {
  o DateTime endsOn
}

/** The Entity exists for a fixed number of years from adoption. */
concept FixedYearsTerm extends Term {
  o Integer years range=[1,]
}

/** The Entity exists until a stated event occurs. */
concept UntilEventTerm extends Term {
  o String event
}

/** Escape hatch - use only when no typed variant fits; justify in provenance. */
concept CustomTerm extends Term {
  o String text
}

// ---------------------------------------------------------------------------
// Extensions attach point (clause 6.2) and Adoption
// ---------------------------------------------------------------------------

/**
 * Clause 6.2: "Terms specific to this Entity may be attached as numbered
 * Extensions, adopted and amended as this Constitution is."
 * Concrete Extension types live in their own namespaces
 * (id.entity.ext.e1 .. e7) and extend this concept - that is how one
 * composed model spans a company and a marriage without forking.
 */
abstract concept Extension {
  o String extensionId regex=/^E[1-9][0-9]*$/
  o String title optional
}

/**
 * The Adoption block: "Adopted by the [Constituents] on [date], and
 * recorded under [IDENTIFIER]. The Registry Rules in force at adoption
 * are accepted by this adoption."
 */
concept Adoption {
  o DateTime adoptedOn
  o String registryRulesVersion optional
  o String recordHash optional
  o String announcementReference optional
}

// ---------------------------------------------------------------------------
// The Constitution
// ---------------------------------------------------------------------------

/**
 * One entity's Constitution under Core v2.2: the Preamble variables, the
 * six typed answers, the roll of Constituents, and the adopted Extensions.
 */
@template
concept Constitution identified by identifier {
  // Preamble and Article I - Identity
  o String entityName
  o String identifier
  o String register
  o String purpose

  // The swap-table noun
  o String constituentNoun
  o String constituentNounPlural

  // Article II - Constituents
  o Cardinality constituentCardinality
  o Constituent[] constituents

  // The six bracketed answers - typed choices, not strings
  o DeathIncapacityRule deathIncapacityRule // 2.5
  o ActRule actRule                         // 3.1
  o AmendmentRule amendmentRule             // 3.2
  o Interpreter interpreter                 // 3.3
  o AnswerabilityRule answerabilityRule     // 4.2
  o Term term                               // 6.1

  // Article VI 6.2 - adopted Extensions (typed, per-extension namespaces)
  o Extension[] extensions

  // Adoption block
  o Adoption adoption
}