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,viewidentity.fate_id,identity.brand_id,identity.name,identity.control_profilemandate.activecohorts.boundminion_countphasespec.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"
}