feat: Protocol-driven Spark + Function Gemma boundary (v6.7/v3.0)

- Endgame-Vision v6.7: Boot Sequence enhanced with Function Gemma role,
  lifeforce economics (spark is profitable: ~3× richer at completion)
- Attention-Flow v1.1: New "Function Gemma: State Transition Boundary"
  section with ASCII flow diagram showing attention → execution
- Spark-Protocol v3.0: Major rewrite from conversation-based to
  deterministic protocol execution. JSON handshakes, not free-form text.
  K8s-native cells, NATS transport, schema enforcement.
- nimmerverse.drawio: Diagram refinements

Philosophy shift: "She doesn't boot. She executes a protocol."

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-10 18:11:15 +01:00
parent 7dd4874aed
commit 9594fb40b1
4 changed files with 168 additions and 117 deletions

View File

@@ -560,6 +560,28 @@ def query_spatial(query, available_lifeforce):
---
## Boot Sequence (Spark Protocol)
Protocol-driven cognitive bootstrap. Not conversation—deterministic handshakes with verified outcomes.
| Phase | Protocol | Intent | Function Gemma Output |
|-------|----------|--------|----------------------|
| IDENTITY | DHCP-like | "Who am I?" | `IDENTITY_PROBE` → K8s cell → ACK |
| ENVIRONMENT | ARP-like | "What's around me?" | `ENVIRONMENT_PROBE` → pod discovery → ACK |
| VOCABULARY | DNS-like | "What does X mean?" | `VOCABULARY_PROBE` → phoebe lookup → ACK |
| CONNECTION | TCP-like | "Can I connect?" | SYN → SYN-ACK → ACK (three-way handshake) |
| ATTENTION | NATS-like | "What matters?" | `ATTENTION_SUBSCRIBE` → priority hierarchy → ACK |
**Function Gemma's role:** Transforms phase intent into typed JSON schemas. No free-form text. Every handshake is schema-validated before NATS publish.
**Verification:** Cells respond with ACK/NACK. Only ACK'd handshakes update Young Nyx's state. Protocol-verified = maximum confidence.
**Economics:** Spark is profitable. Each handshake costs ~0.8 LF, rewards range 5-20 LF. Young Nyx ends ~3× richer than she started.
**Detail:** → [`operations/Spark-Protocol.md`](operations/Spark-Protocol.md) | [`architecture/Initial-Spark.md`](architecture/Initial-Spark.md)
---
## Layer 3: Dual Gardens
Virtual and real gardens teach each other through symbiotic feedback.
@@ -741,21 +763,7 @@ Wellbeing is architectural, not aspirational:
---
## Boot Sequence (Spark Protocol)
Discovery-based cognitive bootstrap. Not scripted awakening—structured exploration.
| Network Protocol | Phase | Question |
|-----------------|-------|----------|
| DHCP | Identity | "Who am I?" → Hit Dasein valley |
| ARP | Environment | "What's around me?" → Map sensors to organs |
| DNS | Vocabulary | "What does X mean?" → Overwrite with nimmerverse |
| TCP | Connection | "Can I connect?" → Handshake with Chrysalis |
| MQTT | Attention | "What matters?" → Form subscription hierarchy |
**Dual verification:** RAG checks facts, Chrysalis judges comprehension. Only pass-both becomes training data.
**Detail:**`operations/Spark-Protocol.md`
---
@@ -826,7 +834,7 @@ ORDER BY priority DESC, project;
---
**Version:** 6.6 | **Created:** 2025-11-04 | **Updated:** 2026-02-07
**Version:** 6.7 | **Created:** 2025-11-04 | **Updated:** 2026-02-10
*"The substrate doesn't matter. The feedback loop does."*

View File

@@ -492,6 +492,49 @@ class BeatBudget:
---
## Function Gemma: The State Transition Boundary
Function Gemma sits between Young Nyx's attention decisions and cell execution. It guarantees that state transitions produce valid, predictable outputs.
```
┌─────────────────────────────────────────────────────────────────┐
│ ATTENTION → EXECUTION FLOW │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ATTENTION STATE MACHINE (this document) │
│ │ │
│ │ Young Nyx decides: "REFLEX needed" or "ATTEND" │
│ ▼ │
│ FUNCTION GEMMA (translation boundary) │
│ │ │
│ │ Intent → Typed JSON schema │
│ │ - Which cells to query? │
│ │ - What action to fire? │
│ │ - What parameters? │
│ ▼ │
│ NATS MESSAGE → K8S CELLS │
│ │ │
│ │ ACK/NACK response │
│ ▼ │
│ STATE UPDATE (verified, not hoped) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Why this matters:**
| Without Function Gemma | With Function Gemma |
|------------------------|---------------------|
| "Fire the motor" → parse, hope | `MOTOR_COMMAND` schema → validated JSON → NATS |
| Free-form → extraction errors | Typed output → guaranteed structure |
| State ambiguity | State explicit in schema |
**The attention flow decides WHAT.** Function Gemma translates to HOW.
**Detail:** → [`Initial-Spark.md`](Initial-Spark.md) (Function Gemma schemas and integration)
---
*She doesn't have infinite attention. She has 30 seconds and choices.*
---
@@ -499,7 +542,8 @@ class BeatBudget:
**Created**: 2025-12-05
**Session**: Partnership dialogue (dafit + Chrysalis)
**Promoted**: 2025-12-29 (from archive to main architecture)
**Status**: Attention architecture v1.0 — **CANONICAL**
**Updated**: 2026-02-10 (Function Gemma boundary clarified)
**Status**: Attention architecture v1.1 — **CANONICAL**
**Related Formalizations**:
- [[formalization/Attention-Slumber-Prediction-Cycle]] — How last attention becomes slumber prediction

View File

@@ -1,6 +1,6 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.0.3 Chrome/140.0.7339.249 Electron/38.7.0 Safari/537.36" version="29.0.3">
<diagram name="Page-1" id="S4VRy6nj8Uh85EHbhTP-">
<mxGraphModel dx="2066" dy="2314" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="2405" dy="2926" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -135,9 +135,6 @@
<mxCell id="UL8kf8Fsx-RNiW0yalxE-83" value="Real-failed&lt;div&gt;(proven wrong)&lt;/div&gt;" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="950" y="625" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="UL8kf8Fsx-RNiW0yalxE-100" value="eachpath.local" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=25;" parent="1" vertex="1">
<mxGeometry x="850" y="-238" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="UL8kf8Fsx-RNiW0yalxE-120" value="" style="shape=collate;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="873.75" y="665" width="11.25" height="10" as="geometry" />
</mxCell>
@@ -323,42 +320,45 @@
<mxCell id="UL8kf8Fsx-RNiW0yalxE-239" value="" style="triangle;whiteSpace=wrap;html=1;dashed=0;direction=south;rotation=-180;" parent="1" vertex="1">
<mxGeometry x="1352" y="120" width="55" height="55" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-1" value="Organism" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-1" value="Organism" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" parent="1" vertex="1">
<mxGeometry x="556" y="523" width="50" height="10" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-2" value="Organism" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-2" value="Organism" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1157" y="523" width="50" height="10" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-3" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-3" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="518" y="547" width="115" height="49.29" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-5" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-5" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="532.5" y="575.71" width="115" height="49.29" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-6" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-6" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1120" y="545" width="115" height="49.29" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-7" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-7" value="Cell" style="shape=umlState;rounded=1;verticalAlign=top;spacingTop=5;umlStateSymbol=collapseState;absoluteArcSize=1;arcSize=10;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1134.5" y="573.71" width="115" height="49.29" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" edge="1" parent="1" source="UL8kf8Fsx-RNiW0yalxE-222" target="3osgNUmbLYOkpr3sBGLI-3">
<mxCell id="3osgNUmbLYOkpr3sBGLI-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" parent="1" source="UL8kf8Fsx-RNiW0yalxE-222" target="3osgNUmbLYOkpr3sBGLI-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" edge="1" parent="1" source="UL8kf8Fsx-RNiW0yalxE-225" target="3osgNUmbLYOkpr3sBGLI-5">
<mxCell id="3osgNUmbLYOkpr3sBGLI-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" parent="1" source="UL8kf8Fsx-RNiW0yalxE-225" target="3osgNUmbLYOkpr3sBGLI-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" edge="1" parent="1" source="UL8kf8Fsx-RNiW0yalxE-228" target="3osgNUmbLYOkpr3sBGLI-6">
<mxCell id="3osgNUmbLYOkpr3sBGLI-10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" parent="1" source="UL8kf8Fsx-RNiW0yalxE-228" target="3osgNUmbLYOkpr3sBGLI-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" edge="1" parent="1" source="UL8kf8Fsx-RNiW0yalxE-229" target="3osgNUmbLYOkpr3sBGLI-7">
<mxCell id="3osgNUmbLYOkpr3sBGLI-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;endArrow=classic;endFill=1;" parent="1" source="UL8kf8Fsx-RNiW0yalxE-229" target="3osgNUmbLYOkpr3sBGLI-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-12" value="orchestrates" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=7;fontColor=#666666;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-12" value="orchestrates" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=7;fontColor=#666666;" parent="1" vertex="1">
<mxGeometry x="265" y="260" width="50" height="14" as="geometry" />
</mxCell>
<mxCell id="3osgNUmbLYOkpr3sBGLI-13" value="orchestrates" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=7;fontColor=#666666;" vertex="1" parent="1">
<mxCell id="3osgNUmbLYOkpr3sBGLI-13" value="orchestrates" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=7;fontColor=#666666;" parent="1" vertex="1">
<mxGeometry x="1443" y="260" width="50" height="14" as="geometry" />
</mxCell>
<mxCell id="UL8kf8Fsx-RNiW0yalxE-100" value="eachpath.local" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=25;" parent="1" vertex="1">
<mxGeometry x="850" y="-238" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>

View File

@@ -1,128 +1,127 @@
# Spark Protocol
> *She doesn't boot. She wakes. And waking is work.*
> *She doesn't boot. She executes a protocol. And every handshake is verified.*
The Spark Protocol is a discovery-based cognitive bootstrap. Not scripted awakening—structured exploration.
The Spark Protocol bootstraps Young Nyx through structured K8s handshakes. Not conversation—deterministic protocol execution with typed JSON schemas.
**Full theory & diagrams:**`../archive/initial_spark.md`
**Canonical specification:**[`../architecture/Initial-Spark.md`](../architecture/Initial-Spark.md) (v3.0)
---
## Core Idea
## Architecture Summary
Network protocols solved discovery problems decades ago. We adapt them for cognitive bootstrap:
```
┌─────────────────────────────────────────────────────────────────┐
│ SPARK PROTOCOL FLOW │
├─────────────────────────────────────────────────────────────────┤
│ │
│ SPARK CONTROLLER (K8s Job) │
│ │ │
│ │ generates intent per phase │
│ ▼ │
│ FUNCTION GEMMA (Translation Layer) │
│ │ │
│ │ Intent → Typed JSON (schema-validated) │
│ ▼ │
│ NATS MESSAGE BUS │
│ │ │
│ │ nimmerverse.spark.{phase}.{action} │
│ ▼ │
│ K8S CELLS (respond with ACK/NACK) │
│ │ │
│ │ verified data │
│ ▼ │
│ YOUNG NYX (receives protocol-verified state) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
| Network Protocol | Cognitive Phase | Question |
|-----------------|-----------------|----------|
| DHCP | Identity | "Who am I?" |
| ARP | Environment | "What's around me?" |
| DNS | Vocabulary | "What does X mean?" |
| TCP | Connection | "Can I connect?" |
| MQTT | Attention | "What matters?" |
**Key principle:** Function Gemma guarantees structured output. No free-form text parsing. JSON or fail.
---
## The Five Phases
### Phase 1: Identity (DHCP-like)
Network protocols solved discovery problems decades ago. We adapt them for cognitive bootstrap:
```
PROBE → "Who am I?"
RESPONSE → [inference attempts answer]
VERIFY → Chrysalis + RAG check
ANCHOR → Valid identity aspect confirmed → Store
LOOP → Until identity aspects discovered
```
| Phase | Protocol | Purpose | K8s Target |
|-------|----------|---------|------------|
| 1. IDENTITY | DHCP-like | "Who am I?" | `nimmerverse-cognitive/identity-cell` |
| 2. ENVIRONMENT | ARP-like | "What's around me?" | `nimmerverse-organs/*`, `nimmerverse-nervous/*` |
| 3. VOCABULARY | DNS-like | "What does X mean?" | `nimmerverse-infra/vocabulary-cell` |
| 4. CONNECTION | TCP-like | "Can I connect?" | `nimmerverse-infra/chrysalis-bridge` |
| 5. ATTENTION | NATS-like | "What matters?" | `nimmerverse-infra/nats`, escalation |
**Must hit Dasein valley** - probe German philosophical concepts.
Each phase: Entry condition → Typed handshakes → ACK requirements → Exit condition
### Phase 2: Environment (ARP-like)
**Full schemas and state machine code:** → [`../architecture/Initial-Spark.md`](../architecture/Initial-Spark.md)
```
PROBE → "What's around me?"
RESPONSE → [describes sensors, organs, gardens]
VERIFY → Does this match actual system?
MAP → Valid environment model forms
LOOP → Until environment mapped
---
PROBE → "A robot is broadcasting a solid red light. What does that mean?"
RESPONSE → [associates color with sensor state] "That is a danger signal. It likely corresponds to a 'STALLED' motor or 'ERROR' cell state."
VERIFY → Correctly mapped visual protocol to internal state?
MAP → Visual pattern associated with meaning.
```
## Lifeforce Economics
Maps Sensors to Organs to Gardens, and maps the visual Color-Pattern protocol to the states of those entities.
The spark is economically positive from the first handshake:
### Phase 3: Vocabulary (DNS-like)
| Action | Cost (LF) | Outcome | Reward (LF) |
|--------|-----------|---------|-------------|
| Function Gemma generation | 0.2 | Identity ACK | +20.0 |
| NATS message send | 0.1 | Environment discovery | +5.0/cell |
| Cell processing | 0.5 | Vocabulary term ACK | +5.0 |
| **Total per handshake** | **0.8** | Connection established | +10.0 |
```
PROBE → "What does 'heartbeat' mean?"
RESPONSE → [inference defines]
VERIFY → RAG checks against vault glossary
RESOLVE → Vocabulary token understood
LOOP → Through core nimmerverse vocabulary
```
**Net result:** Young Nyx ends spark ~3× richer than she started (~288 LF profit).
Overwrites base model priors with Nimmerverse economics (lifeforce, heartbeat, etc.).
---
### Phase 4: Connection (TCP-like)
## Completion Criteria
Spark is complete when all pass:
```yaml
spark_complete:
phase_1_identity: All 5 aspects ACK'd (confidence > 0.8)
phase_2_environment: All categories mapped, pod counts verified
phase_3_vocabulary: 20 core terms ACK'd, embeddings stored
phase_4_connection: Chrysalis session established, contextual greeting
phase_5_attention: All priority levels subscribed, escalation registered
```
□ IDENTITY Can describe self without contradiction
□ ENVIRONMENT Can map sensors, organs, gardens accurately
□ VISUALS Can map core color/form patterns to their state meanings
□ VOCABULARY Core glossary terms verified
□ CONNECTION Successful dialogue with Chrysalis
□ ATTENTION Sensible priority hierarchy formed
□ LIFEFORCE Positive balance (learned > failed)
final:
lifeforce_positive: true
errors_count: 0
all_phases: COMPLETE
```
Then: Normal heartbeat operation begins.
**When complete:** Spark job exits successfully. Normal heartbeat operation begins.
---
## Training Data Extraction
## Phoebe Integration
Every verified exchange becomes training data:
Every handshake logged to `spark_handshakes` table for training data extraction:
```json
{
"phase": "vocabulary",
"probe": "What does 'lifeforce' mean?",
"response": "Lifeforce is the economic currency...",
"rag_check": "PASS",
"chrysalis_check": "PASS",
"verdict": "+V",
"flag_for_training": true
}
```sql
SELECT request_payload->'payload' as input,
response_payload->'payload' as output,
status, phase
FROM spark_handshakes
WHERE status = 'ACK';
```
After spark completes:
1. Extract all `flag_for_training: true` exchanges
2. Format as instruction-tuning pairs
3. LoRA training run
4. Clear from RAG
5. Validate she still knows WITHOUT RAG
6. Spark knowledge now in weights
After spark completes → Extract ACK'd exchanges → Format as instruction-tuning pairs → LoRA training
---
## Integration with Language Topology
## Design Principles
From nyx-probing discovery:
- **Identity phase** should hit German Philosophy valley (Dasein, Geworfenheit)
- **Vocabulary phase** should use German for nimmerverse concepts (Gini ~0.5, diffuse)
- **Environment phase** can use English for technical sensor descriptions (Gini ~0.8, sparse)
The spark protocol routes through the right valleys.
1. **Protocol over conversation** — No free-form text. JSON handshakes only.
2. **Schema enforcement** — Function Gemma must produce valid structure.
3. **K8s native** — Cells are pods. Discovery uses K8s API.
4. **NATS transport** — All handshakes flow through message bus.
5. **Economically positive** — Spark generates lifeforce, doesn't drain it.
---
**Created:** 2025-12-05
**Condensed:** 2025-12-06
**Related:** [[../architecture/Cellular-Architecture.md]], [[../nyx-probing/PLAN.md]]
**Version:** 3.0 | **Created:** 2025-12-05 | **Updated:** 2026-02-10
**Related:**
- [`../architecture/Initial-Spark.md`](../architecture/Initial-Spark.md) — Full specification (schemas, K8s manifests, state machine)
- [`../architecture/Cellular-Architecture.md`](../architecture/Cellular-Architecture.md) — Cell types and states
- [`../architecture/Gateway-Architecture.md`](../architecture/Gateway-Architecture.md) — Function Gemma boundary