Skip to content

Factions & Teams

Two distinct social structures sometimes confused with each other:

  • Faction — an NPC organization. You build standing with it through emergent behavior — combat, trade, exploration, social acts, resource flows; you do not "join" a faction and there are no quests to accept. Affects pricing, port access, patrol response, territorial reception.
  • Team — a cooperative alliance of player accounts. You explicitly create or are invited to one; affects shared resources, coordinated combat, and treasury access.

A player has standing with every NPC faction simultaneously and is a member of at most one team.


Factions (NPC)

The seven designed factions

Faction Type Theme
Terran Federation Lawful Government Order, security, prosperity
Mercantile Guild Trade Consortium Profit-neutral, infrastructure-heavy
Frontier Coalition Independent Colonies Anti-Federation autonomy
Astral Mining Consortium Resource Corp Monopolistic mining
Nova Scientific Institute Research Org Quantum / exotic tech focus
Fringe Alliance Outlaw Coalition Frontier rebels, smuggler refuge
Shadow Syndicate Criminal Syndicate Organized black-market trade
Galactic Concord Operator-managed Authority (📐) Central Nexus governance — fields the Nexus Sentinel Corps

Two hostile-only entities — Pirates (random NPC raiders) and The Cabal (📐 Design-only endgame antagonist with a single fixed Headquarters in Terran Space) — cannot be allied with; only attacked. See ./faction-lore.md for full lore on all nine.

The Federation Police (Terran Federation enforcement arm — Marshal Interdictor squads in Federation Zones) and the Nexus Sentinel Corps (Galactic Concord enforcement arm in the Central Nexus) are both NPC-only police forces with special-issue Interdictor hulls (Federation Marshal Interdictor and Nexus Sentinel Interdictor respectively). They have their own engagement triggers, jurisdiction boundaries, and rep penalties for attacking. Full design in ./police-forces.md.

Reputation scale

Per-faction reputation runs −800 to +800, stored on Reputation.current_value. Two related views over the value coexist:

  • The 17-tier ReputationLevel enum (models/reputation.py) — sets Reputation.current_level, the display title, and the value used by combat-response and port-access rules.
  • The 9 trade-modifier buckets (faction_service.py:TRADE_MODIFIERS) — set the price multiplier at faction-controlled ports. Each bucket coarse-grains one or more enum tiers.

Both are derived from the same numeric value; the table below shows the boundaries and the price effect that applies in each band.

Reputation value Level enum Trade-modifier bucket Price multiplier
≥ +700 EXALTED EXALTED ×0.85 (15% discount)
+500 to +699 REVERED (+700) / HONORED (+500) REVERED ×0.90
+300 to +499 VALUED (+400) / RESPECTED (+300) HONORED ×0.95
+100 to +299 TRUSTED (+200) / ACKNOWLEDGED (+100) FRIENDLY ×0.97
+50 to +99 RECOGNIZED NEUTRAL ×1.00
−50 to +49 NEUTRAL NEUTRAL ×1.00
−51 to −99 NEUTRAL (no enum boundary here) NEUTRAL ×1.00
−100 to −299 QUESTIONABLE (−100) / SUSPICIOUS (−200) / UNTRUSTWORTHY (−300) UNFRIENDLY ×1.05
−300 to −499 SMUGGLER (−400) HOSTILE ×1.15
−500 to −699 PIRATE (−500) / OUTLAW (−600) HATED ×1.30
≤ −700 CRIMINAL (−700) / PUBLIC ENEMY (below) PUBLIC ENEMY ×1.50

The exact threshold function is faction_service.py:_calculate_reputation_level for the enum and TRADE_MODIFIERS (high-to-low list) for the modifier bucket.

Reputation triggers

Faction reputation is emergent only. There are no missions or quests to accept; rep moves through six trigger surfaces — combat, trade, exploration, social/political, ongoing-state drips, and resource flows — driven by natural play. The full set is canonical per ADR-0032.

Triggers are dispatched server-side through a single apply_emergent_action(player, action_type, sector_id, witnesses) wrapper that fans out to per-faction update_reputation calls in one transaction, applies the rivalry-cascade rule (below), and clamps results against the F2 decay ±100 floor/ceiling and combined-rep caps.

✅ Shipped — the apply_emergent_action(db, player, action, context) dispatcher (services/gameserver/src/services/emergent_reputation_service.py): a canon trigger table, fan-out via faction_service.apply_faction_rep_delta, and the rivalry cascade. 🚧 Partial — only the Kill a Pirate or Cabal NPC → +5 Federation trigger is wired to a live call site (the combat kill resolver); the remaining triggers below are 📐 Design-only until their call sites invoke the dispatcher.

Per-faction trigger tables

Terran Federation (lawful order)

Action Δ Notes
Kill a Pirate or Cabal NPC +5 combat resolver post-hook — ✅ Shipped (wired at the kill resolver via apply_emergent_action)
Kill a player with active Wanted/Suspect status in Fed-Controlled space +15 combat hook reads wanted_status
Kill a system-bounty target in fedspace +25 bounty payout post-hook
Trade at a Federation-flagged port +1 / 5,000 cr re-tuned from +1/10,000
Defend a Fed-Controlled sector (drone defense survives an attack) +20 re-tuned from +15
Discover a sector inside or adjacent to Fed territory +10 re-tuned from +5
Pay region tax cumulatively +1 / 25,000 cr taxed regional governance hook
Repel a planet siege on Fed-aligned colony +50 siege-lift event
Use the Federation distress beacon (one-way-stranding rescue) −10 / use 24-hour cooldown; free transport to nearest fedspace sector. The panic-button cost for being trapped behind a one-way warp. See ../galaxy/sectors.md#one-way-warps.

Mercantile Guild (profit-neutral infrastructure)

Action Δ Notes
Trade at any Guild-flagged station +1 / 5,000 cr core loop
Use a player toll gate (someone else's public gate, with cargo) +1 / 5,000 cr cargo value rewards trade-network participation
Successful arbitrage round-trip (≥30k profit, ≥3 sectors apart) +5 rewards skill, not just volume
Buy STANDARD insurance +5 one-time per hull
Buy PREMIUM insurance +10 one-time per hull
Buy BASIC insurance +2 one-time per hull
Honor a public market-make order (post + fill within 24h) +5 reliability signal
Operate player port at fair tariff (2–4%) for 30 days +20/month per ../economy/port-ownership.md

Frontier Coalition (anti-Federation autonomy)

Action Δ Notes
Discover a sector ≥10 hops from any Capital +15 exploration core
First-arrival in an isolated cluster via Quantum Jump +30 trailblazer signal
Establish a colony in a Frontier-zone sector +50 their core mission
Tow a non-team-mate's drifting/escape-pod ship across ≥2 sectors +15 good-neighbor emergent
Trade at a Frontier outpost +1 / 5,000 cr volume
Sell gourmet_food or luxury_goods to a Frontier colony port +2 / 10,000 cr luxury-starved colonies
Defend a Frontier sector from pirates +20 defense
Vote in a Frontier-aligned regional governance resolution +2 / vote civic participation
Harvest in a nebula adjacent to AM-influence sector without an AM license +5 / harvest contested extraction; pairs with the AM penalty above — see ../galaxy/quantum-resources.md#faction-reputation-hooks

Astral Mining Consortium (monopolistic mining — see ../economy/mining.md)

Action Δ Notes
Sell raw ore to an AM-flagged refinery +2 / 5,000 cr double-weighted
Mine an asteroid-field sector with Mining Laser equipped +1 / harvest cycle per ../economy/mining.md
Pay AM claim-license fee voluntarily +15 / license legitimizes extraction
Defend an AM-claimed sector during siege +25 core archetype
Trade precious_metals (Astral specialty) +1 / 8,000 cr specialty preference
Harvest in a nebula adjacent to AM-influence sector without an AM license −5 / harvest unlicensed extraction; pairs with FC entry below — see ../galaxy/quantum-resources.md#faction-reputation-hooks

Nova Scientific Institute (research)

Action Δ Notes
First-scan a NEBULA / BLACK_HOLE / ANOMALY / WARP_STORM sector +15 research data
Harvest Quantum Shards in a nebula +1 / 3 Shards per ../galaxy/quantum-resources.md
Harvest Quantum Shards in a Crimson nebula specifically +1 / Shard 4× rate; Nova prizes high-field-strength data
Refine 5 Shards → 1 Crystal at a Nova-flagged station +8 / job highest of the refining venues
Sell exotic_technology to a Nova-flagged station +2 / 5,000 cr research material
Run a long-range Quantum Jump scan (paid scan, 5 turns) +1 / scan, capped 5/day their tech, their data
Donate xeno-artifact to Nova station +30 one-shot rare event
Sell anomaly-investigation dataset to Nova +5 / dataset data is a commodity
First-scan a Genesis-formed planet within 7 days of formation +15 Genesis biology

Fringe Alliance (smuggler coalition)

Action Δ Notes
Black-market transaction at a Fringe-controlled port +25 / transaction per ../economy/black-market.md
Successfully evade a Federation contraband scan with cargo +10 / evasion anti-symmetric to Fed's scan-survive trigger
Trade at a Fringe-controlled port (legal goods) +1 / 5,000 cr volume
Pilot a stolen ship into Fringe space and dock at a Fringe port +5 one-shot per stolen-ship session
Survive a Suspect Status cycle (1+ hour) +15 one-shot per cycle
Tow a Fringe-flagged smuggler out of Fed pursuit +20 rescue mechanic
Pay tribute to a Pirate (the "pay" branch of the encounter) +2 refusing to fight is its own statement

Shadow Syndicate (criminal trade — see ../economy/black-market.md#syndicate-fence-venues)

Action Δ Notes
Fence a Cargo Wreck cargo at a Syndicate fence venue +5 / 5,000 cr fenced core loop
Sell stolen-flagged commodity (origin = early-grace salvage) +10 / transaction flagged-origin path
Launder credits through ≥3 trade hops (laundering chain completes) +20 / laundering completion per black-market spec
Survive a full Wanted Status cycle without impound +10 one-shot per Wanted cycle
Forge port-tariff records (skim ≥1% as port owner) +20 / month tariff-evasion event
Place player-bounty on Heroic+ player (frame-job) +10 / placement reads target's personal-rep tier

Pirates (hostile-only — capped at 0)

Action Δ Pirates Notes
Pay tribute to a Pirate +2 (toward 0) unchanged from canon
Spare a Pirate at <25% hull (let them flee) +5 (toward 0) mercy path
Sell to a Class-8 (Black Hole) port — pirate fence chain +1 / 5,000 cr (toward 0) economic engagement clambers out of deep negative

Negative emergent triggers (selection)

Action Affected Δ
Attack a faction-flagged ship host faction −50
Attack a faction-controlled port host faction −100
Smuggling violation in faction-policed sector policed faction −25
Hold a black-market commodity passing through Fed Core (drip) Federation −10 / sector hop
Mine in Astral-claimed sector unlicensed Astral −10 / extraction
Detonate Genesis Device in NEBULA sector Nova −50
Genesis-deploy in Federation core without permit Federation −100
Turn in a Fringe operative for bounty Fringe −100 + permanent betrayal flag
Sustained Heroic personal rep (≥250) for 7+ days Fringe −5 / day drip
Sustained low personal rep (≤−250) for 7+ days Mercantile −2 / day drip
Predatory tariff (≥7%) on owned port for 7+ days Federation, Mercantile, Frontier −15 / week each
Pod-kill anywhere visible to fed-space sector presence Federation −25

Rivalry cascade rule

When Δ_X > 0 to a rivalry-locked faction X, an automatic fractional negative fires to X's canonical rival in the same transaction. Cascades fire on positive deltas only — negative actions do not reward rivals (that path is farmable). Cascades respect F2 decay floor/ceiling and the combined-rep caps.

Source faction Rival Cascade fraction
Terran Federation ↔ Fringe Alliance each direction 0.5×
Mercantile Guild ↔ Shadow Syndicate each direction 0.5×
Frontier Coalition ↔ Astral Mining each direction 0.4× (📐 — promoted to combined-rep cap 700)
Nova Scientific Institute ↔ Astral Mining each direction 0.4× (📐 — promoted to combined-rep cap 700)
Federation → Pirates one-way 0.2× (📐 — one-way Pirate cascade)
Fringe → Pirates one-way +0.1× (clamps at 0; never positive) (📐 — one-way Pirate cascade)

✅ Shipped — the dispatcher computes the cascade on positive deltas and applies the two fully-seeded 0.5× pairs (Terran Federation ↔ Fringe Alliance, Mercantile Guild ↔ Shadow Syndicate); the rows flagged 📐 are registered but not yet live (await the combined-rep cap / Pirate-cascade machinery).

Anti-symmetric matrix (selected multi-faction events)

Some actions move multiple factions simultaneously beyond the rivalry cascade. Fired by the same apply_emergent_action wrapper as a single transactional event.

Action TF MG FC AM NS FA SS PI
Kill Pirate in Fed-Controlled sector +10 0 0 0 0 −5 0 −10
Refine Shard at Nova facility +2 0 0 −2 +8 0 0 0
Refine Shard at Syndicate shadow venue −3 −5 0 0 −2 +1 +6 0
Smuggle through Fed (evade scan) −25 −5 +1 0 0 +10 +5 +1
Smuggle through Fed (caught) −150 −10 0 0 0 +10 +5 +5
Genesis-deploy in Frontier zone −10 0 +75 −10 +5 +5 0 0
Build a public toll warp gate 0 +30 +5 0 +5 0 0 0
Build a private/whitelist warp gate −5 0 +5 0 0 +5 +10 0
Tow a non-team-mate home +2 +5 +15 0 0 0 0 0
Buy PREMIUM insurance 0 +10 0 0 0 0 0 0
Donate xeno-artifact to Nova +5 0 +2 −10 +30 0 0 0
Pay pirate tribute −5 −2 −2 0 0 +2 +1 +2 (toward 0)

Ongoing-state drip mechanics

Several rep effects are drips on persistent states rather than one-shot events. Per-tick updates are accumulated and flushed hourly by the wrapper.

State Effect
Wearing a faction-issued ship skin in issuing-faction territory +1/hr issuing faction
Wearing a faction-issued ship skin in rival territory −2/hr rival faction
Carrying contraband openly through a Fed-Controlled sector −1/sector hop Federation
Sustained personal_reputation ≥ +250 (Heroic+) for 7+ days −5/day Fringe
Sustained personal_reputation ≤ −250 (Outlaw+) for 7+ days −2/day Mercantile
Active Wanted Status, docked at a Fringe port +1/hr Fringe (welcomes fugitives)

Refinery-of-record provenance

📐 Design-only. Every Quantum Crystal carries a refined_at_faction_id provenance tag. Using a Crystal in a warp gate Phase 1 commit (per ADR-0029) awards +25 to the refining faction at gate-activation. This single hook makes refining venue choice load-bearing for the late-game arc — the Crystal is anonymous fungible economically but politically remembers where it was minted.

Witness mark

📐 Design-only. When a faction patrol fights in a sector and the player neither engages nor flees, a neutral witness mark accrues against that patrol. Three witness marks at the same patrol convert to +5 of that faction. Rewards "being there" without role-play cosplay; ties peripheral participation to faction identity.

Per-day throttle

To prevent farming, each (player, faction) pair caps at 10 events/day. Once the cap is hit, that faction's positive award is skipped entirely for the rest of the day (a full stop rather than ADR-0032's half-rate continuation). Implemented at the apply_emergent_action dispatcher before write.

✅ Shipped — the per-(player, faction) 10-events/day cap (full-stop variant) is enforced in emergent_reputation_service.apply_emergent_action on positive direct deltas, with counters held in player.settings JSONB under emergent_rep_throttle (no migration).

Global daily pool (per ADR-0056 N-V1). On top of the per-faction cap, each player has a single daily pool that aggregates the sum of positive faction-rep deltas across all factions. Launch value: 100 rep / day. When the pool is exhausted, further faction-rep gains drop to 0 for the rest of the day (the action itself still applies — cargo delivered, NPC killed — but the rep delta is zeroed). Negative deltas are not throttled. The pool resets at UTC midnight.

✅ Shipped — the 100-rep/day global pool clamps each positive award to the pool remaining; negatives never consume the pool or a per-faction event count; the bucket carries its open-date and resets when the stored UTC date is no longer today.

The two redemption-arc actions in the cascade-recovery section below are the only canonical bypasses of the global pool.

These numbers are launch balance targets; the underlying API (faction_service.update_reputation(player_id, faction_id, change, reason)) accepts an arbitrary signed integer, so live tuning happens by adjusting the values that game code passes in, not by changing the schema.

Cascade lockout — redemption arc

Per ADR-0056 N-F2. A player who has drifted into deep Pirate alignment (via the rivalry-cascade rule above) needs a discrete break-out path back toward Federation. Two new entries in the action-delta table provide it:

Action Faction-rep delta Notes
Voluntarily destroy a captured pirate Stronghold or Outpost +500 Terran Federation, −500 Pirates Sacrifices the captured holding (no salvage, no compensation). Clears Pirate-alignment cascade lockout. One-shot per captured holding; can be repeated across multiple holdings. Bypasses the global daily pool — this is the recovery vehicle, the cap would defeat the purpose.
Donate the wealth from a captured pirate holding to Federation +200 Terran Federation, −100 Pirates The captured holding's stored credits + commodity inventory transfer to Federation; the holding itself remains the player's. Subject to the daily pool cap.

The player must own (have captured) a pirate holding per ADR-0047 and ADR-0048 to use either action — these are not paths tourists or new accounts can stumble into. ARIA narrates these options when the player's faction-rep enters cascade-lock state, so the path is discoverable without a dedicated UI surface.

Faction-rep ↔ personal-rep — disjoint scopes

Per ADR-0056 N-D1. Faction reputation (this section) and personal reputation (per ./ranking.md) are independent signals. They do not cross-feed unless explicitly enumerated. A single in-game action can carry both a faction-rep delta and a personal-rep delta — they apply in parallel inside the same transaction; neither dampens or amplifies the other.

Cross-feeds that do exist (Launch list):

Source Trigger Cross-feed
Personal → Faction Entering Wanted Status −50 rep with all Federation factions; +25 rep with all Pirate factions; one-shot at the Wanted-Status state-edge, not per-action
Personal → Faction Wanted Status clears No reverse cross-feed; the original deltas are not refunded

Future cross-feeds must land in this table via a new ADR.

Reputation decay

Reputations outside the ±100 band decay back toward that band when the player has not interacted with the faction for over 30 days:

  • Inactivity threshold: 30 days since Reputation.last_updated.
  • Decay rate: −1 point per inactive day past the threshold.
  • Per-call cap: max 50 points of decay applied in a single apply_reputation_decay invocation.
  • Decay floor / ceiling: positive reputations decay toward +100 (never below); negative reputations decay toward −100 (never above). The −99 to +99 neutral band is preserved as-is — values inside it never decay.
  • Pause flag: Reputation.decay_paused (admin lock) and Reputation.is_locked skip decay entirely.

Each decay event appends to Reputation.history JSONB with reason: "Inactivity decay (<N> days idle)" for audit.

Rivalries

FACTION_RIVALRIES defines combined reputation caps:

  • Terran Federation ↔ Fringe Alliance — combined max 800.
  • Mercantile Guild ↔ Shadow Syndicate — combined max 600.

Gaining standing with one faction effectively caps how high you can climb with its rival.

✅ Shipped — the combined-rep cap on positive gains is enforced in apply_emergent_action via a synchronous replica of FactionService._apply_rivalry_cap reading the same FACTION_RIVALRIES table; the two fully-seeded pairs above are live, and a positive delta is clamped so the rival pair never exceeds its combined ceiling.

📐 Design-only — additional rivalries (per ADR-0032) promoted to combined-rep caps:

  • Frontier Coalition ↔ Astral Mining Consortium — combined max 700.
  • Nova Scientific Institute ↔ Astral Mining Consortium — combined max 700.

Territory & influence

Each sector's relationship to a faction is described by an influence percentage (0–100) on the per-(sector, faction) SectorFactionInfluence row. The percentage drives a four-tier territory taxonomy used by patrol and pricing logic:

Territory state Influence Behavior
Core 100% Faction HQ and immediate vicinity. Patrols guaranteed; hostile-reputation players attacked on sight.
Controlled ≥ 75% Faction port presence; frequent patrols; minor penalties for hostile reputation.
Contested 40–60% across two or more factions Mixed patrols; PvP-friendly; port prices follow the dominant-influence faction's reputation rule for the player.
Uncontrolled 0% Pirate spawn zones; no faction benefits or penalties.

Dynamic influence

Player actions adjust influence. Targets — design balance, may be tuned at launch:

Action Effect
Defend a faction-flagged sector (drone defense survives an attack) +1% influence for that faction
Destroy a rival-faction ship −2% rival influence
Build a warp gate connecting two sectors +5% influence in the connecting sector for the gate-builder's dominant-rep faction
Establish a colony in-sector +3% influence for the player's dominant-rep faction
Open a player port at fair tariff (2–4%) for 30 days +2% influence for the dominant-faction of the host sector

Influence effects

  • Port prices swing ±10% based on the dominant-faction reputation of the player.
  • Patrol spawn rate scales with influence — higher influence means more friendly patrols.
  • Pirate spawn rate is inversely proportional — high faction influence suppresses pirate encounters.
  • Emergent rep triggers in high-influence sectors weight toward the dominant faction (kills, defenses, discoveries credit the dominant influencer; secondary influencers ≥25% receive half-share rep).

📐 Design-onlySectorFactionInfluence model is specified in ../../DATA_MODELS/gameplay.md#sectorfactioninfluence; the gameplay loops that read and write it (dynamic patrols, NPC behavior, influence deltas above) are not yet implemented.

Source map

Topic Path
Faction service & rivalries services/gameserver/src/services/faction_service.py
Faction model services/gameserver/src/models/faction.py
Reputation model services/gameserver/src/models/reputation.py
API routes services/gameserver/src/api/routes/factions.py

Teams (player)

Creation and membership

  • Creation cost: 10,000 credits (TEAM_CREATION_COST in services/team_service.py).
  • Default size cap: 4 members (max_members parameter — configurable per team; the canonical balance target is 4).
  • One team per player: enforced at creation and invite acceptance.
  • 24-hour leave cooldown between teams (design).

Roles

models/team_member.py:TeamRole defines four roles:

  • LEADER — full control: dissolve team, transfer leadership, assign all roles, override any permission. Exactly one per team (resolved via Player.team_id of the leader).
  • OFFICER — invite, kick, manage treasury (subject to permission flags), manage alliances and faction-aligned operations.
  • MEMBER — standard membership; treasury deposit, default vision sharing, no admin actions.
  • RECRUIT — probationary; deposit-only treasury access, no invite/kick rights.

Granular per-member permissions sit on TeamMember as a mix of explicit booleans (can_invite, can_kick, can_manage_treasury, can_manage_alliances) and a free-form permissions JSONB column for future extensions.

Treasury

Shared resource pool with 12 resource types:

Credits and the canonical 7-commodity catalog (per ../definitions.md#resource-types): Ore, Organics, Gourmet Food, Fuel, Equipment, Exotic Technology, Luxury Goods. Strategic resources also tracked: Quantum Shards, Quantum Crystals, Lumen Crystals, Prismatic Ore.

Operations: deposit, withdraw (permission-gated), transfer between members, transaction history.

Status: ✅ Deposit / withdraw / transfer + balance are shipped and live-proven (2026-06-14, see FINDINGS.md) — wired to the player-client team Treasury tab. ✅ Transaction history is a dedicated ledger: each treasury movement writes a TreasuryTransaction row to the team_treasury_transactions table (services/gameserver/src/models/treasury_transaction.py), capturing team_id, resource_type, kind, amount, balance_after, actor_player_id, reason, and created_at. 🚧 Caveat: player deposit/withdraw/transfer is restricted to credits and quantum_crystals (PLAYER_TRANSFERABLE_RESOURCES whitelist); the other 10 types can be held in the treasury (server-fed, e.g. loot) but are not player-movable — a code-wins narrowing of the "12 resource types" line above, flagged for canon reconciliation.

Combat advantages

  • 60/40 statistical edge against non-team opponents (design).
  • Friendly-fire prevention.
  • Shared sector vision.
  • Coordinated drone deployment.
  • Defensive notifications when any teammate is attacked.

Fleet operations

A team can field fleets — multi-ship formations for coordinated battle. See combat.md for fleet mechanics.

Team reputation with factions

Team has a calculated faction-standing using one of three methods: - Average (default). - Lowest member's standing. - Leader's standing.

Switching method has a 7-day cooldown. Faction interactions treat the team as a unified diplomatic entity.

War system (partial)

🚧 Partial — formal war declarations, scoring, ceasefires, victory rewards. Models likely exist; the UI and resolution loop are design-stage.

Alliances (design only)

📐 Design-only — multi-team coalitions with shared vision, no-fire pacts, council voting.

Source map

Topic Path
Team service services/gameserver/src/services/team_service.py
Team model services/gameserver/src/models/team.py
Team member roles services/gameserver/src/models/team_member.py
Team API services/gameserver/src/api/routes/teams.py
Fleet service services/gameserver/src/services/fleet_service.py

Quick comparison

Faction Team
Members NPC organization Up to 4 player accounts
Joining Implicit (you have standing with all of them) Explicit invite/create
Multiple Yes — standing with all simultaneously One team per player
Resource sharing No Treasury (12 types)
Combat coordination No Yes (fleets, formations, vision sharing)
Reputation effect Per-faction pricing + port access + patrol response Aggregate team-wide diplomatic standing
Cost Free 10,000 credits to create
Persistence Permanent Disbandable; 24h re-join cooldown