Skip to content

README: Fate

Profile version: net.plantange/v1 Kind: fate Surface root: fate::<fate_id>/


What is a Fate?

A Fate is a cohort-scoped governance layer for brand-bound vision projection. One cohort (Minions), operating under a valid Janet mandate, produces bounded fictional constructs — visions — that shape the perceived reality of another cohort (Subjects) under a unified brand identity.

A Fate without a mandate is registered but dormant — it cannot inject visions until a mandate is bound. A Fate without cohort bindings cannot target anyone.

Key properties:

  • Authority is inherited, not self-generated. The Fate does not manage legitimacy — it inherits authority from Janet mandates.
  • Minions belong to exactly one Fate. The MinionRegistry enforces this invariant atomically.
  • No direct mutation of agent state. Visions are injected into perception, not into physics state.
  • Multiple Fates may target the same cohort. Cross-Fate reconciliation is intentionally absent in Phase 1–2.

Core Model

Fate              — brand-bound governance container (mandate + cohorts + control profile)
ControlProfile    — permissive / balanced / tyrannical emission regime
FateRegistry      — deterministic lookup by fate_id
MinionRegistry    — enforces the one-Fate-per-minion invariant (bidirectional)

Phase Model

Fate capability expands in phases. The phase field tracks current readiness:

Phase Label What is operational
1 registered Fate is addressable. Minions can be associated. No vision injection.
2 active Mandate is bound, cohorts are assigned. Vision injection enabled.
3+ arbitrating Arbitration system engaged; cross-Fate reconciliation. (Future)

Phase advancement requirements:

  • registered → active: mandate_id bound AND both source_cohort_id and target_cohort_id assigned.
  • active → arbitrating: deterministic arbitration engine engaged (Phase 3+ implementation).

Surface Organisation

fate::<fate_id>/
  identity/
    fate_id    brand_id    name    description
    control_profile         — permissive | balanced | tyrannical
  mandate/
    active                  — bool: mandate is bound and Fate can project
    mandate_id              — present if active
  cohorts/
    bound                   — bool: both source and target assigned
    source_cohort_id        — Minions cohort (if bound)
    target_cohort_id        — Subjects cohort (if bound)
  minion_count              — agents currently in the MinionRegistry for this Fate
  phase                     — registered | active | arbitrating
  spec/
    ref    genome
  engine/
    name    version
  view
  frame

Key Properties

Control Profile (identity/control_profile)

The emission and arbitration regime:

Profile Emission behaviour Arbitration weight
permissive Conservative output, yields readily Low — defers to other Fates
balanced Standard emission priority Medium — neutral (default)
tyrannical Higher rates, lower initial entropy (higher coherence at injection) High — dominates in arbitration (Phase 3+)

All profiles remain bounded by per-agent caps, entropy/TTL limits, and the no-state-mutation guarantee.

Mandate (mandate/)

The Janet mandate provides two authorities:

  • Read (census): the Fate can observe the target cohort.
  • Write (broadcast): the Fate can inject visions into the target cohort.

Without a mandate, mandate.active = false and the Fate is dormant. A dormant Fate is registered and may accumulate Minions, but produces no output.

Cohort Binding (cohorts/)

Both cohorts must be assigned for active projection:

  • source_cohort_id — the Minions cohort; agents who produce visions under this Fate.
  • target_cohort_id — the Subjects cohort; agents whose perceived reality is shaped.

These may differ or partially overlap. A Fate may not have the same cohort as both source and target (Minions producing visions for themselves is a degenerate case handled upstream).

Minion Count (minion_count)

The number of agents currently registered in the MinionRegistry under this Fate. Each Minion belongs to exactly one Fate at a time; re-association atomically moves them. The full Minion list is coordinator state, not a KNAT surface — monitor minion_count to confirm the Fate has active projectors.


Operating Procedure

Dormant Fate (phase = registered): observe mandate.active. If false, no action is possible until a mandate is bound. minion_count may be non-zero — Minions accumulate before activation is valid.

Activating a Fate: bind a mandate (mandate_id set, mandate.active = true), then assign both cohorts (cohorts.bound = true). Phase transitions to active.

Active Fate (phase = active): the normal operating state. Watch minion_count to confirm Minions are present and participating. Multiple active Fates targeting the same Subject cohort is valid; cross-Fate reconciliation is out of scope until Phase 3.

Control profile watch: in Phase 3+, tyrannical Fates will dominate arbitration. If multiple Fates are active over the same Subject cohort, note their profiles — a tyrannical Fate will have outsized influence when arbitration engages.


Relation to Team and League

Fate, Team, and League are all social constructs, but they operate at different layers:

Construct Authority source Targets Output
Team None (existence is sufficient) Agents who opt in (attach) Slogans — non-binding projection text
League Enrollment + template policy Teams enrolled in the league Brand-sanctioned speech via templates
Fate Janet mandate Cohort (Subjects) Visions — bounded fictional constructs

A Fate is categorically different from a Team or League. Team/League operate on speech (what agents say). Fate operates on perception (what Subjects perceive). The mandate requirement is the key boundary — it is what gives Fate genuine authority over a Subject cohort rather than mere influence.


MVP Presence

A minimal valid Fate KNAT snapshot:

  • id, frame, engine, view
  • identity.fate_id, identity.brand_id, identity.name, identity.control_profile
  • mandate.active
  • cohorts.bound
  • minion_count
  • phase
  • spec.ref, spec.genome

Example: Buffy Fate (active, tyrannical)

{
  "id": "buffy",
  "spec": {
    "ref": "file://brands/fates/buffy.json",
    "genome": "f8f8f8f8a1b2c3d4"
  },
  "engine": { "name": "janet-executor", "version": "0.4.0" },
  "view": "full",
  "frame": 1024,
  "identity": {
    "fate_id": "buffy",
    "brand_id": "buffy-brand",
    "name": "Buffy Fate",
    "description": "Tyrannical vision cohort.",
    "control_profile": "tyrannical"
  },
  "mandate": {
    "active": true,
    "mandate_id": "mandate-buffy-primary"
  },
  "cohorts": {
    "bound": true,
    "source_cohort_id": "buffy-minions",
    "target_cohort_id": "subjects-general"
  },
  "minion_count": 7,
  "phase": "active"
}

Example: Dormant Fate (registered, awaiting mandate)

{
  "id": "silent-watcher",
  "spec": {
    "ref": "file://brands/fates/silent_watcher.json",
    "genome": "00112233aabbccdd"
  },
  "engine": { "name": "janet-executor", "version": "0.4.0" },
  "view": "full",
  "frame": 1024,
  "identity": {
    "fate_id": "silent-watcher",
    "brand_id": "watcher-brand",
    "name": "Silent Watcher",
    "description": "Observational Fate, awaiting mandate binding.",
    "control_profile": "balanced"
  },
  "mandate": {
    "active": false
  },
  "cohorts": {
    "bound": false
  },
  "minion_count": 3,
  "phase": "registered"
}