net.anisota.lab.plasmodium
Schema Diff
+16 -4
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 8 non-breaking changes.
Breaking Changes (2)
- RemovedVertex RemovedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.interSpecies" }
- RemovedEdge RemovedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.interSpecies", kind: "prop", name: Some("interSpecies") }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.interMode" }
- AddedVertex AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.interStrength" }
- AddedVertex AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.spawn" }
- AddedVertex AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.species:items.renderMode" }
- AddedEdge AddedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.interMode", kind: "prop", name: Some("interMode") }
- AddedEdge AddedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.interStrength", kind: "prop", name: Some("interStrength") }
- AddedEdge AddedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.spawn", kind: "prop", name: Some("spawn") }
- AddedEdge AddedEdge { src: "net.anisota.lab.plasmodium:body.genome.species:items", tgt: "net.anisota.lab.plasmodium:body.genome.species:items.renderMode", kind: "prop", name: Some("renderMode") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.interSpecies" }
Added Elements
AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.interMode" }AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.interStrength" }AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.spawn" }AddedVertex { vertex_id: "net.anisota.lab.plasmodium:body.genome.species:items.renderMode" }
Additional Notes
- Breaking: RemovedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.interSpecies", kind: "prop", name: Some("interSpecies") }
- Non-breaking: AddedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.interMode", kind: "prop", name: Some("interMode") }
- Non-breaking: AddedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.interStrength", kind: "prop", name: Some("interStrength") }
- Non-breaking: AddedEdge { src: "net.anisota.lab.plasmodium:body.genome", tgt: "net.anisota.lab.plasmodium:body.genome.spawn", kind: "prop", name: Some("spawn") }
- Non-breaking: AddedEdge { src: "net.anisota.lab.plasmodium:body.genome.species:items", tgt: "net.anisota.lab.plasmodium:body.genome.species:items.renderMode", kind: "prop", name: Some("renderMode") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A Physarum (slime-mould) organism grown in the Anisota Lab's Plasmodium workbench and saved to the owner's collection. Stored as its recipe rather than its pixels: a 'seed', the simulation 'gridSize', a 'genome' of behavioural parameters (all continuous 0..1 tunables scaled to integers 0..1000, since atproto lexicons have no float type), and the ordered 'foods' and 'inoculations' the grower placed. Because the GPU agent simulation is deterministic given the same seed, genome and placements, replaying the recipe regrows the organism. A small PNG thumbnail is kept for display.",
6
6
"key": "any",
7
7
"record": {
8
8
"properties": {
9
9
"agentTier": {
10
10
"description": "Agent-count tier that grew it (0=small, 1=medium, 2=large). A reopen may cap lower on a weaker device.",
11
11
"type": "integer"
12
12
},
13
13
"createdAt": {
14
14
"description": "When the organism was saved",
15
15
"format": "datetime",
16
16
"type": "string"
17
17
},
18
18
"foods": {
19
19
"description": "Ordered food drops the grower placed; each replayed at its step so growth rebuilds identically.",
20
20
"items": {
21
21
"properties": {
22
22
"atStep": {
23
23
"description": "Sim step at which it was dropped",
24
24
"type": "integer"
25
25
},
26
26
"r": {
27
27
"description": "Radius in cells",
28
28
"type": "integer"
29
29
},
30
30
"x": {
31
31
"description": "Normalised x scaled 0..1000",
32
32
"type": "integer"
33
33
},
34
34
"y": {
35
35
"description": "Normalised y scaled 0..1000",
36
36
"type": "integer"
37
37
}
38
38
},
39
39
"required": [
40
40
"x",
41
41
"y",
42
42
"atStep"
43
43
],
44
44
"type": "object"
45
45
},
46
46
"maxLength": 256,
47
47
"type": "array"
48
48
},
49
49
"genome": {
50
-
"description": "Behavioural parameters. Global tunables plus one species entry (two when multiSpecies). All continuous values are scaled to integers 0..1000.",
50
+
"description": "Behavioural parameters. Global tunables plus one species entry (two when multiSpecies). Continuous values are scaled to integers 0..1000; enumerated traits (spawn, interMode, renderMode) are small raw integer indices.",
51
51
"properties": {
52
52
"blur": {
53
53
"description": "Diffusion (3x3 blur) strength, 0..1000",
54
54
"type": "integer"
55
55
},
56
56
"foodWeight": {
57
57
"description": "How strongly agents are drawn to the food channel, 0..1000",
58
58
"type": "integer"
59
59
},
60
-
"interSpecies": {
61
-
"description": "Cross-species coupling: 0..500 repel, 500 ignore, 500..1000 attract",
60
+
"interMode": {
61
+
"description": "Cross-species interaction index: 0 ignore, 1 attract, 2 repel, 3 predator/prey, 4 symbiosis, 5 competition",
62
+
"type": "integer"
63
+
},
64
+
"interStrength": {
65
+
"description": "Cross-species coupling strength, 0..1000",
66
+
"type": "integer"
67
+
},
68
+
"spawn": {
69
+
"description": "Initial spawn pattern index: 0 scatter, 1 ring, 2 spore, 3 colonies, 4 poles, 5 spiral",
62
70
"type": "integer"
63
71
},
64
72
"species": {
65
73
"description": "One entry per agent population",
66
74
"items": {
67
75
"properties": {
68
76
"decay": {
69
77
"description": "Trail persistence, 0..1000 = 0.80..1.00 retained",
70
78
"type": "integer"
71
79
},
72
80
"density": {
73
81
"description": "Fraction of the agent budget this species occupies, 0..1000",
74
82
"type": "integer"
75
83
},
76
84
"deposit": {
77
85
"description": "Trail deposit amount, 0..1000",
78
86
"type": "integer"
79
87
},
80
88
"hue": {
81
-
"description": "Optional per-species colour hue, 0..1000",
89
+
"description": "Per-species colour hue, 0..1000 = 0..360 degrees",
90
+
"type": "integer"
91
+
},
92
+
"renderMode": {
93
+
"description": "Render mode index: 0 filament, 1 veil, 2 crystal, 3 plasma, 4 flow",
82
94
"type": "integer"
83
95
},
84
96
"rotationAngle": {
85
97
"description": "Rotation angle RA, 0..1000 = 0..90 degrees",
86
98
"type": "integer"
87
99
},
88
100
"sensorAngle": {
89
101
"description": "Sensor angle SA, 0..1000 = 0..90 degrees",
90
102
"type": "integer"
91
103
},
92
104
"sensorOffset": {
93
105
"description": "Sensor distance SO, 0..1000 = 0..32 cells",
94
106
"type": "integer"
95
107
},
96
108
"step": {
97
109
"description": "Step size per move, 0..1000 = 0..4 cells",
98
110
"type": "integer"
99
111
}
100
112
},
101
113
"required": [
102
114
"sensorAngle",
103
115
"rotationAngle",
104
116
"sensorOffset",
105
117
"step",
106
118
"deposit",
107
119
"decay",
108
120
"density"
109
121
],
110
122
"type": "object"
111
123
},
112
124
"maxLength": 2,
113
125
"type": "array"
114
126
}
115
127
},
116
128
"required": [
117
129
"species"
118
130
],
119
131
"type": "object"
120
132
},
121
133
"gridSize": {
122
134
"description": "Trail-field grid resolution in cells (square)",
123
135
"type": "integer"
124
136
},
125
137
"image": {
126
138
"description": "A PNG data URL thumbnail of the organism",
127
139
"maxLength": 120000,
128
140
"type": "string"
129
141
},
130
142
"inoculations": {
131
143
"description": "Ordered inoculation taps (respawned agent patches).",
132
144
"items": {
133
145
"properties": {
134
146
"atStep": {
135
147
"description": "Sim step at which it was placed",
136
148
"type": "integer"
137
149
},
138
150
"r": {
139
151
"description": "Radius in cells",
140
152
"type": "integer"
141
153
},
142
154
"species": {
143
155
"description": "0 or 1",
144
156
"type": "integer"
145
157
},
146
158
"x": {
147
159
"description": "Normalised x scaled 0..1000",
148
160
"type": "integer"
149
161
},
150
162
"y": {
151
163
"description": "Normalised y scaled 0..1000",
152
164
"type": "integer"
153
165
}
154
166
},
155
167
"required": [
156
168
"x",
157
169
"y",
158
170
"species",
159
171
"atStep"
160
172
],
161
173
"type": "object"
162
174
},
163
175
"maxLength": 256,
164
176
"type": "array"
165
177
},
166
178
"lastTickAt": {
167
179
"description": "When the organism last advanced, used to grow it forward on reopen",
168
180
"format": "datetime",
169
181
"type": "string"
170
182
},
171
183
"multiSpecies": {
172
184
"description": "Whether a second agent population was active",
173
185
"type": "boolean"
174
186
},
175
187
"name": {
176
188
"description": "Display name for the organism",
177
189
"maxGraphemes": 100,
178
190
"maxLength": 800,
179
191
"type": "string"
180
192
},
181
193
"palette": {
182
194
"description": "Colour palette id (amber, ember, lichen, frost, mono)",
183
195
"maxLength": 40,
184
196
"type": "string"
185
197
},
186
198
"seed": {
187
199
"description": "PRNG seed the simulation and genome were initialised with",
188
200
"type": "integer"
189
201
},
190
202
"steps": {
191
203
"description": "How many simulation steps the organism had grown when saved",
192
204
"type": "integer"
193
205
}
194
206
},
195
207
"required": [
196
208
"name",
197
209
"seed",
198
210
"gridSize",
199
211
"genome",
200
212
"createdAt"
201
213
],
202
214
"type": "object"
203
215
},
204
216
"type": "record"
205
217
}
206
218
},
207
219
"id": "net.anisota.lab.plasmodium",
208
220
"lexicon": 1
209
221
}