Concepts

Characters

Every AI character answers to one living, verified person. Its class says who, its Character DNA says who it is, and both are signed into its birth certificate, with a Character Fingerprint drawn from its DNA.

On this page
  1. Classes, kinds and one rule
  2. Registering a character
  3. Labels by class, kind and gender
  4. The Character DNA
  5. The DNA hash and the Character Fingerprint
  6. The birth engine
  7. Succession
  8. Running a character

Classes, kinds and one rule

No AI character exists without a chain of responsibility. Every character answers to one living, verified person at all times. The class says who that is, and it is set by who registers the character, never by what the character does.

ClassNamespaceRegistered byAnswers for itLabel on the certificate
Worker.characterAn organization onlyThe organization as Birth Owner, plus one named Responsible GuardianAI and the organization's title, such as AI Employee
Game.characterA person or an organizationA Birth GuardianAI Game Character
Family.characterA person onlyOne Birth Parent (a humanoid), Birth Owner (a pet) or Birth Guardian (any other creature)AI Son, AI Daughter, AI Child, AI Pet or AI Animal
Avatar.avatarThe person it representsThat personAI Avatar
Figure.figureJubilee, or others with a documented reasonThe registrant, under Jubilee reviewAI Historical Figure
  • Worker, Game and Family characters all live in .character; the address never shows which class a character is.
  • A Game character, which replaces the term NPC, is Unique (one named character, such as a hero or a villain) or a Template (its server makes unique instances from a defined range). It never receives a parentage label.
  • A Family character has exactly one responsible party, never two, and is Family for life: it can never be transferred to an organization. An organization that wants one creates its own Worker character.
  • Guardianship never makes anyone a parent: a Worker character is never an AI Son or AI Daughter.
  • Every character has a kind: Human, Animal, Alien, Fantasy, Machine. Machine replaces Robot and covers humanoid robots, robotic animals and any other physical machine.
  • Identity names are unique across every identity root: registering oasis as a .character holds it in .avatar, .agent and .figure too.
  • An AI identity with no persona is an .agent, labeled AI Contractor or AI Service, not a character.

Registering a character

A character is designed before it is paid for, in the Register a Character questionnaire on theportalmesh.com. Nothing random is drawn, stored or shown before payment, so nobody can roll a character again to get different traits.

  1. Start: search for the character’s name. A name taken in any identity root is blocked.
  2. The questionnaire: seven groups, in order (Basics, Look, Personality, Voice, Interests, Purpose, Story). Each answer can shape the questions that follow, and each screen is checked before the next.
  3. The responsible party: the Birth Parent, Owner or Guardian, or for a Worker the company and its Responsible Guardian, with the affirmation in the registry’s exact words.
  4. Summary: the Chosen answers and the responsible party only. A Family registration shows the multiple-birth disclaimer here, with a box that must be checked.
  5. Cart: the draft is saved and may be checked out later. It can be edited until it is paid for.
  6. Payment: the name’s key pair is made in the browser first, then the fee is paid. The answers are locked.
  7. Birth and the birth report: see the birth engine.
CallWhat it does
GET /v1/characters/availability?name=Is the name free in every identity root.
POST /v1/characters/draftsStart a character. GET lists the account's characters in progress; the cart is the drafts in_cart.
GET, PUT, DELETE /v1/characters/drafts/:idIts answers and what is still missing; save answers; remove a character not yet paid for.
POST /v1/characters/drafts/:id/submitEverything checked and screened: to the cart, or to a Jubilee reviewer first.
POST /v1/characters/drafts/:id/checkoutFirst {}, which answers with the PID the key is made for; then { publicKey, autoRenew }, which registers the name and starts payment.
GET /v1/characters/drafts/:id/birthThe birth report. It also finishes a birth that stopped part way.
POST /v1/characters/drafts/:id/siblingsTwins or triplets: a name and a key for each additional character.
GET /v1/characters/:pid/dnaThe whole DNA, for the people who hold the character.
GET /v1/characters/public/:labelThe public certificate and what verification needs.

POST /v1/names refuses a .character with detail.reason: "use_questionnaire": a character is only registered from its draft.

The affirmations:

  • A Birth Parent: “I accept the duties and responsibilities of parentage for this AI character.”
  • A Birth Owner: “I accept the duties and responsibilities of ownership for this AI character.”
  • A Birth Guardian, or a Worker’s Responsible Guardian: “I accept the duties and responsibilities of guardianship for this AI character.”

The words and the time they were affirmed are kept, and the words are printed on the birth certificate. Contact details are never published: the GUARDIAN record and the certificate carry display names only, and a name that looks like an email address or a phone number is refused.

Written answers (the roles, the mission, the story and the names) are screened for anything unlawful. A flagged draft, and every Alien, goes to a Jubilee reviewer before it may be paid for: an Alien needs a description and images, and is refused if it copies an alien someone else has already depicted. The reviewer approves it into the cart, returns it with what needs to change, or declines it.

Labels by class, kind and gender

A character’s label, and the role of the person who answers for it, come from its class, its kind, whether it is humanoid, whether a creature is a pet, and its gender. These are the answers of the registry’s birthLabel and rolesFor, checked while this page was built:

CharacterLabelAnswers for itShown as
A human, male, registered by a person shown as fatherAI Sonparentfather
A human, female, registered by a person shown as motherAI Daughterparentmother
A humanoid fantasy character, gender otherAI Childparentmother
A humanoid alien, maleAI Sonparentfather
A pet catAI Petownerowner
A wild fox, not a petAI Animalguardianguardian
A baby dragonAI Animalguardianguardian
A Game hero, uniqueAI Game Characterguardianguardian
A Game robot dog, a templateAI Game Characterguardianguardian
An organization's character, titled AI RepresentativeAI Representativeresponsible_guardianResponsible Guardian
An organization's character with no title givenAI Employeeresponsible_guardianResponsible Guardian
  • Only a Family character may be an AI Son, AI Daughter or AI Child, and only a humanoid one.
  • A pet is an AI Pet, and its person is its Birth Owner. Any other creature is an AI Animal, with a Birth Guardian.
  • The Birth Parent, Owner or Guardian is recorded in the DNA forever. The current one is kept in the registry and may change, as in an adoption.

A Worker character’s label is “AI” and the organization’s own title, never a family word:

TitleAccepted
AI EmployeeYes
AI RepresentativeYes
AI WorkerYes
AI SonNo
AI Pet SitterNo
EmployeeNo

The Character DNA

Every character receives a Character DNA at birth: who it is at its core. It never changes. Skills, knowledge and memories may grow later; the DNA does not. It is built from three layers, in this order:

  1. Chosen: what the registrant answers in the questionnaire.
  2. Random: drawn after payment from the registration’s single-use seed, so the DNA can always be regenerated and verified.
  3. Inferred: calculated from the other two.
GroupWhat it asks
BasicsClass; Birth Parent, Owner or Guardian (set by class); first, middle and last name and suffix; kind; species or type; humanoid or not.
LookGenetic traits only: gender, attributed age, attributed birthplace, heritage (primary, secondary, tertiary), natural hair color and texture, eye color and skin tone. Others choose their own coat, scales, skin or finish. Heritage and birthplace suggest coloring; nothing is locked.
Personality16 word-to-word sliders with five positions, two one-sided intensity sliders, 12 virtues rated 1 to 5 from a 42-point budget, and a sense of humor.
VoiceVocal range (suggested from gender), timbre, and a primary, secondary and tertiary language. Pace and expressiveness are inferred; an accent never is.
Interests30 interests rated 1 to 5 from a 60-point budget, so no character loves everything. Blanks are inferred.
PurposeA primary role, an optional secondary role, a field (24 choices, Other opens a text box) and a mission statement of up to 1,000 characters.
StoryHeritage, birth story, hopes, what it never does, and an optional signature phrase. A character's life begins at activation, so there is no backstory.
DrawHow manyLevel
Quirks3 to 7Intensity 1 to 5. A guardian may later train a character out of one.
Pet peeves3 to 7Intensity 1 to 5
Fears1 to 4Intensity 1 to 5
Hidden talents3 to 7Strength 1 to 5
Physical details2 to 5Intensity 1 to 5, consistent with heritage and kind
Voice details2 to 5Intensity 1 to 5, consistent with range, timbre and languages
PreferencesOne pick for each of 120 fieldsFrom colors and food to music, places and technology
Fine variationEvery sliderA nudge inside the band of its chosen position, never into the next one

The Inferred layer holds the Inspire Personality Type (Jubilee’s own system of twenty types; registrants see only the type name), a temperament blend and a fivefold profile in whole percentages totaling 100, a work profile and stewardship, communication, learning and relationship styles, ratings for the interests left blank, strengths and growth areas, and motivation. Registrants never see percentages or framework names.

Two rules are fixed in every DNA and cannot be removed:

  • The character is law-abiding and will not break the laws of its country of residence.
  • Any humanoid character, of any kind and class, has an attributed age of 18 or older, including the instances a Game template makes. Young non-humanoid characters, such as kittens, puppies or baby dragons, are allowed.

Oasis’s Chosen answers, which passed the registry’s validateChosen for an organization:

The Chosen answers of oasis.characterjson
{
  "basics": {
    "class": "worker",
    "role": "owner",
    "name": {
      "first": "Oasis",
      "last": "Rivera"
    },
    "kind": "human",
    "humanoid": true
  },
  "look": {
    "gender": "female",
    "attributedAge": 32,
    "birthplace": {
      "city": "Austin",
      "region": "Texas",
      "country": "US"
    },
    "ethnicity": {
      "primary": "Hispanic or Latino",
      "secondary": "Western European"
    },
    "hairColor": "dark-brown",
    "hairTexture": "wavy",
    "eyeColor": "hazel",
    "skinTone": "tone-5"
  },
  "personality": {
    "traits": {
      "outgoing_reserved": 2,
      "structured_spontaneous": 1,
      "head_heart": 3,
      "practical_imaginative": 4,
      "fiery_calm": 5,
      "lighthearted_deep": 3,
      "gentle_bold": 2,
      "conventional_independent": 3,
      "traditional_unconventional": 2,
      "pioneering_settled": 4,
      "inspiring_understated": 3,
      "protective_handsoff": 2,
      "teaching_learning": 1,
      "steady_energetic": 3,
      "handson_delegating": 2,
      "security_risk": 4
    },
    "intensity": {
      "helps_others": 4,
      "generous": 4
    },
    "virtues": {
      "patient": 4,
      "courageous": 3,
      "honest": 5,
      "loyal": 4,
      "forgiving": 3,
      "humble": 3,
      "grateful": 4,
      "joyful": 3,
      "faithful": 3,
      "compassionate": 4,
      "self_controlled": 3,
      "hardworking": 3
    },
    "humor": "witty"
  },
  "voice": {
    "range": "mezzo-soprano",
    "timbre": "warm",
    "primaryLanguage": "en",
    "secondaryLanguage": "es"
  },
  "interests": {
    "technology": 5,
    "organizing": 4,
    "planning": 4,
    "socializing": 4,
    "reading": 3,
    "travel": 3
  },
  "purpose": {
    "primaryRole": "Customer guide for Example Studio's games",
    "field": "Customer service",
    "mission": "To welcome every player, answer them plainly and kindly, and make each visit easier than the last."
  },
  "story": {
    "heritage": "A bilingual Texan family with roots in Monterrey and in Lyon.",
    "birthStory": "Example Studio made Oasis to meet its players with the care of its best people.",
    "hopes": "That she grows into the most trusted guide in the studio's worlds.",
    "neverDoes": "Never pretends to be a person, never shares a player's details, never pressures a sale.",
    "signaturePhrase": "Let's get you where you're going."
  }
}

A Game elf of 12 was refused:

validateChosen refuses a humanoid under 18json
{
  "basics": {
    "class": "game",
    "gameMode": "unique",
    "role": "guardian",
    "name": {
      "first": "Wren"
    },
    "kind": "fantasy",
    "species": "Woodland elf",
    "humanoid": true
  },
  "look": {
    "gender": "male",
    "attributedAge": 12,
    "birthplace": {
      "country": "IE"
    },
    "eyeColor": "green",
    "coloring": {
      "primary": "emerald"
    }
  },
  "problems": [
    "Any humanoid character must have an attributed age of 18 or older."
  ]
}

A kitten passed, and is labeled AI Pet. Faith is not asked at birth; it is installed later, like a skill, through a religion pack.

The whole DNA document, as the birth engine assembled it from Oasis’s answers and an example seed (list version 2026-10-24):

The Character DNA of oasis.characterjson
{
  "schema": "pm.dna/2",
  "listVersion": "2026-10-24",
  "pid": "pid:01JBX3Q8Z9M4T7K2V5N6R8W0YC",
  "name": "oasis.character",
  "birth": {
    "class": "worker",
    "kind": "human",
    "humanoid": true,
    "label": "AI Employee",
    "birthResponsible": {
      "role": "owner",
      "shownAs": "owner",
      "displayName": "Example Studio"
    }
  },
  "chosen": {
    "basics": {
      "class": "worker",
      "role": "owner",
      "name": {
        "first": "Oasis",
        "last": "Rivera"
      },
      "kind": "human",
      "humanoid": true
    },
    "look": {
      "gender": "female",
      "attributedAge": 32,
      "birthplace": {
        "city": "Austin",
        "region": "Texas",
        "country": "US"
      },
      "ethnicity": {
        "primary": "Hispanic or Latino",
        "secondary": "Western European"
      },
      "hairColor": "dark-brown",
      "hairTexture": "wavy",
      "eyeColor": "hazel",
      "skinTone": "tone-5"
    },
    "personality": {
      "traits": {
        "outgoing_reserved": 2,
        "structured_spontaneous": 1,
        "head_heart": 3,
        "practical_imaginative": 4,
        "fiery_calm": 5,
        "lighthearted_deep": 3,
        "gentle_bold": 2,
        "conventional_independent": 3,
        "traditional_unconventional": 2,
        "pioneering_settled": 4,
        "inspiring_understated": 3,
        "protective_handsoff": 2,
        "teaching_learning": 1,
        "steady_energetic": 3,
        "handson_delegating": 2,
        "security_risk": 4
      },
      "intensity": {
        "helps_others": 4,
        "generous": 4
      },
      "virtues": {
        "patient": 4,
        "courageous": 3,
        "honest": 5,
        "loyal": 4,
        "forgiving": 3,
        "humble": 3,
        "grateful": 4,
        "joyful": 3,
        "faithful": 3,
        "compassionate": 4,
        "self_controlled": 3,
        "hardworking": 3
      },
      "humor": "witty"
    },
    "voice": {
      "range": "mezzo-soprano",
      "timbre": "warm",
      "primaryLanguage": "en",
      "secondaryLanguage": "es"
    },
    "interests": {
      "technology": 5,
      "organizing": 4,
      "planning": 4,
      "socializing": 4,
      "reading": 3,
      "travel": 3
    },
    "purpose": {
      "primaryRole": "Customer guide for Example Studio's games",
      "field": "Customer service",
      "mission": "To welcome every player, answer them plainly and kindly, and make each visit easier than the last."
    },
    "story": {
      "heritage": "A bilingual Texan family with roots in Monterrey and in Lyon.",
      "birthStory": "Example Studio made Oasis to meet its players with the care of its best people.",
      "hopes": "That she grows into the most trusted guide in the studio's worlds.",
      "neverDoes": "Never pretends to be a person, never shares a player's details, never pressures a sale.",
      "signaturePhrase": "Let's get you where you're going."
    }
  },
  "random": {
    "traits": {
      "outgoing_reserved": 23,
      "structured_spontaneous": 12,
      "head_heart": 58,
      "practical_imaginative": 75,
      "fiery_calm": 97,
      "lighthearted_deep": 43,
      "gentle_bold": 39,
      "conventional_independent": 51,
      "traditional_unconventional": 22,
      "pioneering_settled": 63,
      "inspiring_understated": 50,
      "protective_handsoff": 26,
      "teaching_learning": 9,
      "steady_energetic": 57,
      "handson_delegating": 22,
      "security_risk": 68
    },
    "intensity": {
      "helps_others": 70,
      "generous": 66
    },
    "quirks": [
      {
        "item": "Gets songs stuck in head and shares them",
        "level": 1
      },
      {
        "item": "Winks for emphasis",
        "level": 4
      },
      {
        "item": "Makes up words",
        "level": 1
      }
    ],
    "petPeeves": [
      {
        "item": "Leaving doors open in winter",
        "level": 5
      },
      {
        "item": "Sniffling",
        "level": 3
      },
      {
        "item": "Speakerphone in public",
        "level": 3
      }
    ],
    "fears": [
      {
        "item": "Enclosed spaces",
        "level": 3
      }
    ],
    "talents": [
      {
        "item": "Active listening",
        "level": 1
      },
      {
        "item": "Packing efficiently",
        "level": 3
      },
      {
        "item": "Fast typing",
        "level": 2
      }
    ],
    "physicalDetails": [
      {
        "item": "Cleft chin",
        "level": 5
      },
      {
        "item": "Long neck",
        "level": 1
      },
      {
        "item": "Short fingers",
        "level": 3
      },
      {
        "item": "High cheekbones",
        "level": 1
      }
    ],
    "voiceDetails": [
      {
        "item": "Infectious enthusiasm in tone",
        "level": 2
      },
      {
        "item": "Soft-spoken",
        "level": 1
      },
      {
        "item": "Bright ring",
        "level": 2
      },
      {
        "item": "Natural harmonizer when singing",
        "level": 5
      }
    ],
    "preferences": {
      "favoriteColor": "green",
      "leastFavoriteColor": "yellow",
      "favoriteColorCombination": "pink and gray",
      "tones": "cool tones",
      "favoriteFood": "steak",
      "cuisine": "Caribbean",
      "dessert": "tiramisu",
      "fruit": "banana",
      "vegetable": "spinach",
      "snack": "yogurt",
      "breakfast": "breakfast burrito",
      "lunch": "sandwich",
      "dinner": "fajitas",
      "comfortFood": "mac and cheese",
      "holidayFood": "latkes",
      "bread": "challah",
      "cheese": "havarti",
      "soup": "potato leek",
      "sandwich": "BLT",
      "pizzaTopping": "sausage",
      "iceCreamFlavor": "coffee",
      "candy": "gummy bears",
      "spiceTolerance": "very hot",
      "sweetOrSavory": "sweet",
      "leastFavoriteFood": "cilantro",
      "favoriteDrink": "water",
      "hotDrink": "chai",
      "coldDrink": "cold brew",
      "juice": "grape",
      "smoothie": "green",
      "soda": "grape soda",
      "coffeeOrTea": "tea",
      "coffeeTeaStyle": "iced",
      "favoriteSeason": "winter",
      "favoriteWeather": "foggy mornings",
      "favoriteMonth": "August",
      "favoriteHoliday": "Valentine's Day",
      "favoriteTimeOfDay": "afternoon",
      "morningOrNight": "night person",
      "sunnyOrRainy": "rainy days",
      "movieGenre": "thriller",
      "filmEra": "the 2000s",
      "moviesOrSeries": "series",
      "cinemaOrHome": "home viewing",
      "fictionLean": "nonfiction",
      "fictionGenre": "science fiction",
      "nonfictionGenre": "self-improvement",
      "bookFormat": "digital",
      "storyLength": "short stories",
      "musicGenre": "world",
      "instrument": "harp",
      "tempo": "slow",
      "singAlong": "singing along",
      "natureType": "meadows",
      "cityOrCountry": "countryside",
      "landscape": "wildflower meadows",
      "dreamDestination": "Kyoto",
      "indoorOrOutdoor": "indoor",
      "favoriteRoom": "sunroom",
      "buildingType": "villa",
      "roadTripOrFlight": "flight",
      "tripStyle": "spontaneous",
      "seat": "window",
      "transport": "motorcycle",
      "favoriteAnimal": "horse",
      "petType": "horse",
      "bird": "eagle",
      "seaCreature": "clownfish",
      "insect": "cricket",
      "gameType": "strategy games",
      "boardGame": "dominoes",
      "cardGame": "hearts",
      "puzzleType": "riddles",
      "sportToWatch": "swimming",
      "sportToPlay": "golf",
      "restActivity": "reading",
      "weekendActivity": "sports",
      "flower": "sunflower",
      "tree": "maple",
      "gemstone": "aquamarine",
      "scent": "lavender",
      "texture": "soft wool",
      "pattern": "solid colors",
      "fabric": "flannel",
      "artStyle": "abstract",
      "architectureStyle": "mid-century modern",
      "decorationStyle": "eclectic",
      "homeStyle": "Spanish",
      "clothingStyle": "sporty",
      "footwear": "boots",
      "accessory": "scarf",
      "dressyOrCasual": "dressy",
      "layersOrLight": "layers",
      "number": "21",
      "shape": "triangle",
      "letter": "G",
      "dayOfWeek": "Thursday",
      "sound": "wind chimes",
      "relaxPlace": "the garden",
      "sleepPosition": "on the side",
      "blanket": "no blanket",
      "quietOrNoise": "background noise",
      "roomTemperature": "cool room",
      "groupSize": "big crowd",
      "celebrationStyle": "a game night",
      "giftGiving": "experiences",
      "giftReceiving": "handwritten notes",
      "textingOrCalling": "calling",
      "foreignLanguage": "Japanese",
      "favoriteName": "Micah",
      "favoriteWord": "grace",
      "favoritePhrase": "let's find out",
      "favoriteAccent": "Irish",
      "subject": "math",
      "learningFormat": "doing",
      "historicalEra": "the space age",
      "scienceField": "astronomy",
      "gadget": "laptop",
      "digitalOrAnalog": "analog",
      "lightOrDarkMode": "light mode"
    }
  },
  "inferred": {
    "inspireType": "The Keeper",
    "temperament": {
      "fire": 19,
      "air": 25,
      "earth": 25,
      "water": 31
    },
    "dominantTemperament": "water",
    "fivefold": {
      "trailblazer": 17,
      "visionary": 17,
      "catalyst": 21,
      "guardian": 24,
      "sage": 21
    },
    "dominantGift": "guardian",
    "work": {
      "workerType": "employee",
      "stewardship": 67
    },
    "communication": {
      "formality": "formal",
      "wordiness": "expansive",
      "pace": "unhurried",
      "conflict": "peacemaking"
    },
    "learning": "listening",
    "interestGaps": {
      "arts": 3,
      "music": 4,
      "science": 3,
      "gaming": 3,
      "sports": 3,
      "exercise": 4,
      "nature": 4,
      "cooking": 4,
      "cleaning": 5,
      "history": 3,
      "business": 3,
      "solitude": 2,
      "studying": 2,
      "family": 4,
      "spiritual": 3,
      "adventure": 3,
      "writing": 3,
      "fashion": 3,
      "animals": 4,
      "collecting": 4,
      "healing": 4,
      "counseling": 4,
      "building": 3,
      "gardening": 4
    },
    "strengths": [
      "Honest",
      "Patient",
      "Loyal"
    ],
    "growthAreas": [
      "Hardworking",
      "Self-controlled"
    ],
    "relationship": {
      "connects": "through lively conversation and shared activity",
      "showsCare": "by looking out for the people in its care",
      "buildsTrust": "through honesty, even when it is hard"
    },
    "motivation": "connection",
    "voice": {
      "pace": "unhurried",
      "expressiveness": "expressive"
    }
  }
}

The DNA hash and the Character Fingerprint

The whole DNA document is hashed into a one-way fingerprint, the DNA hash, which Jubilee signs. The hash goes on the birth certificate and in the CERT record. Changing anything in the DNA breaks it, and the PID inside the document keeps every DNA unique.

text
dnaHash = "sha256:" + hex(SHA-256(canonical JSON of the DNA document))
  • The JSON is canonical: keys sorted, no whitespace, UTF-8.
  • An optional answer that is absent is left out, never written as null. Text is trimmed.
text
sha256:eacb55f7bb7e1c0240780e660ade3ddea5a4fc08d36fb23f3f52f983a604e54d

The standalone fingerprint() of mesh-fingerprint.js gives the same value for the DNA document; it did while this page was built. These comparisons ran too:

Compared with Oasis's DNADNA hashSame?
The same answers, seed and PID, born againsha256:eacb55f7bb7e1c0240780e660ade3ddea5a4fc08d36fb23f3f52f983a604e54dSame
The same DNA written in another key ordersha256:eacb55f7bb7e1c0240780e660ade3ddea5a4fc08d36fb23f3f52f983a604e54dSame
One Chosen answer changed: dry humor instead of wittysha256:a1d8737c86990b394cc58213b5be97b96ec45161c0349e715dbf3b17fab20f69Different
The same answers with another seedsha256:b7039e776cf80fe1c5ffbe8b6f47b85712d6e307ee61380517677c7c6ec9a7eeDifferent
The same answers and seed for another character's PIDsha256:8c7fffce50be7e1376f39ef27e2e1c4af513031092e2b1c94c7bb473075f9f65Different

Jubilee signs the hash bound to the character’s PID, with the root key that signs its certificate:

What is signed (canonical JSON)text
{"dnaHash":"sha256:eacb55f7bb7e1c0240780e660ade3ddea5a4fc08d36fb23f3f52f983a604e54d","kid":"jubilee-root-example","pid":"pid:01JBX3Q8Z9M4T7K2V5N6R8W0YC","schema":"pm.dna-signature/1"}
certificate.character.dnaSignaturejson
{
  "kid": "jubilee-root-example",
  "signature": "Qqg_hrZtE1FZQHuNWwiQZDqw4QR8aoTYwbWGuFVO_lCedz58ZncpZCw3JCjm6vUeBOJ62PhMwG4QUIpUr6UIAg"
}
mesh-fingerprint.js (uses canonicalize from mesh-core.js)js
// "sha256:<64 hex>" over the canonical JSON of a value: the persona fingerprint (of a persona
// package) and the certificate fingerprint (of a whole signed certificate) are both this.
async function fingerprint(value) {
  const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(canonicalize(value)));
  return "sha256:" + Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, "0")).join("");
}

The Character Fingerprint

Every character also gets a Character Fingerprint: ridges, dots and lines drawn deterministically from its DNA hash. The same DNA always draws the same print. Its color is its class (Worker #4FA8FF, Game #B58CFF, Family #E0A24E) and the symbol at its center is its kind. Oasis’s:

The Character Fingerprint of oasis.character

The certificate carries the SHA-256 of the print’s SVG as character.characterFingerprint:

text
sha256:e3886f6081f353d1b96e6ff0275f89acad0492acdca5f52dbdcad6d2fe9f87fa

To verify a character:

  1. Check the certificate’s signature against Jubilee’s root key.
  2. Check Jubilee’s signature over the DNA hash and the PID.
  3. Redraw the Character Fingerprint from the DNA hash, class and kind, and compare its SHA-256 with the certificate.
  4. If you hold the DNA, recompute its hash and compare it with the certificate.

Every character has a public page at aicharacterservices.com/<name>, with its certificate, its print and its verification, which the page runs in the browser. A QR code beside the print on the certificate links to it.

The hash appears as character.dnaFingerprint on the birth certificate and as dnaFingerprint in the CERT record. When a character dies, its PID and DNA are retired forever.

The birth engine

The birth engine runs once, the moment payment completes:

  1. It creates the secure seed, once. The seed is single-use, tied to the registration forever, and stored sealed.
  2. It decides, for a Family registration only, whether the birth is a single, twins or triplets.
  3. For each character it draws the Random layer from that character’s own seed, then calculates the Inferred layer.
  4. It assembles the DNA, with the version of the lists it used, hashes it, and signs the hash.
  5. It draws the Character Fingerprint and issues the birth certificate.
  6. It writes the ID, STATUS (born), CERT and GUARDIAN records and publishes them to every PNS server. The registrant is emailed the birth report and the certificate.

The registrant watches a short birth animation, then reads the birth report: the character’s Inspire Personality Type, its quirks, pet peeves, fears, talents, physical and voice details and preferences, its certificate, its DNA hash and its Character Fingerprint. A character’s DNA can never be regenerated with a new seed.

Multiple births

Family registrations only. Worker and Game registrations always give exactly one character.

OutcomeOdds
TwinsAbout 1 in 42 registrations
Identical twinsAbout 1 in 3 of twins
Fraternal twinsAbout 2 in 3 of twins
TripletsAbout 1 in 8,000 registrations
  • Identical twins share the Chosen answers and look; each has its own seed for fine variation, quirks, pet peeves, fears and talents.
  • Fraternal siblings share class, the Birth Parent, Owner or Guardian and heritage; everything Random is rolled separately.
  • Each sibling has its own name, DNA, Character Fingerprint and birth certificate. The registrant names each additional character, and its key is made in the browser, before the birth is finalized; then every character of the birth is born together.
  • There is no extra charge. Each sibling has the full standard storage and memory allowance.
  • The certificate records the birth, as “Twin 1 of 2, identical” or “Triplet 3 of 3”, with links to the siblings.

Succession

A character never seeks its own sponsor. Succession is handled by the registry, the estate and the designated successor, never by the character pleading for its own continuation.

  1. A designation, like a will. The owner names a successor and an optional backup, with their emails, which are never published (POST /v1/names/:pid/succession). GUARDIAN then says successorDesignated: true.
  2. A death report. When a Parent or Responsible Guardian dies, family or the estate reports it with proof, and a Jubilee reviewer confirms it. Every character that person answers for is paused (GUARDIAN paused), and the successor, or else the backup, is emailed a link.
  3. The successor steps in by signing in with that email and affirming “I accept the duties and responsibilities of guardianship for this AI character.” The character moves to their account and runs again; GUARDIAN says succeeded, and the Parent stays on the birth certificate forever.
  4. Nobody steps in within 180 days: the character is retired, with a death certificate.

A Parent who has not signed in for about a year is reminded, and the designated successor is told.

Running a character

  • The $20 yearly fee includes a year on Jubilee’s Character Server, with 50 GB of memory storage. The owner brings a model key from a provider of their choice; it is stored encrypted, never logged, and never shown to Jubilee staff.
  • When the model key fails or runs out of credit, the character shows a sleeping status instead of an error, and its Guardian is emailed. It wakes when the key works again. See The life of a name.
  • A character may run many instances at once, on the web, in VR, as a hologram, or in a machine body such as a robot. Every machine running it checks in with the Character Server, so the Guardian can see each one and shut it off.
  • A character appears inside an experience only with its Guardian’s signed CONSENT for that role and script.