Skip to content
Next — unreleased

Council Rank

View as Markdown

Council Rank is what a character has become: the rank itself, the level in each activity, the research unlocked, and the perks in effect. It all hangs off the character, and all of it is readable.

XP lives on the character, but a level is a judgement — it depends on the game’s thresholds, not on the raw number alone. The progression read does the join for you:

import { getCharacterProgressionForProfile } from '@aephia/atlas-kit/identity';
const progression = await getCharacterProgressionForProfile(
ctx,
profileAddress,
);
progression.xp.councilRank.level; // the account-wide rank
progression.xp.pilot.level; // one activity category

Every category — councilRank, pilot, mining, crafting, building, combat, dataRunner, dailyXp — carries earned, spent, and level, and progression.xpDefinitions holds the thresholds the levels were judged against, so you can also render “how far to the next one”.

The catalog is game data — the same for everyone, independent of any character:

import { getResearchCatalog } from '@aephia/atlas-kit/identity';
const catalog = await getResearchCatalog(ctx);
const node = catalog.nodes[0];

Each node lists what it costs (XP from specific categories at minimum levels, ATLAS, sometimes resources) and — the part that matters — node.modifier: the perk it grants when unlocked.

The character’s side of research is on the character itself:

const unlocked = character.modifiers.unlockedNodes;
const levels = character.modifiers.nodeLevels;

And the sum of everything in effect — every unlocked perk applied — is one bundle of values:

const inEffect = character.modifiers.values;
inEffect.fleetSize; // how many fleets this character may field
inEffect.warpSpeedModifier;
inEffect.craftingEfficiencyModifier;

This is the answer to “can this player add another fleet”: compare character.modifiers.values.fleetSize against character.counts.fleets. The same counts object tracks claim stakes and crafting habs.

Levels are derived, not stored. The raw XP is on the character; the level comes from judging it against the game’s thresholds. Use the progression read rather than inventing your own cutoffs.

Earned and spent are different numbers. Research costs XP, so a category shows both what was ever earned and what has been spent from it. A level is about earning; affordability is about what is left.

The catalog carries no character state. getResearchCatalog contains the shared research catalog. Whether a node is unlocked lives on the character’s modifiers, not on the catalog.