One play of a Make the Sky game, published by the player into their own repo. It stores every input rather than trusting a score: each chapter's engine is deterministic, so replaying its log on the same game reproduces the run exactly. Owning the record is the identity proof and replaying it is the score proof; score and the rest are advisory.
tid
Timestamp-based ID
Properties
builds
array
of
ref
#build
Optional
For a game whose players build their own: the build played with, one a chapter type that takes one. Part of play: a verifier replays with it, and refuses a build the chapter type wouldn't take (or any build on a game without builds). Absent on such a game: each type's default build.
maxLength: 8 itemschoices
array
of
integer
Optional
For a game whose story branches: the option picked at each choice scene the run reached, in order, counting from 0. With the game, they say which chapters the logs belong to; a verifier walks the path they give and refuses a run whose picks or logs don't fit it. Absent (or empty) for a game without choices.
maxLength: 60 itemscleared
integer
Optional
Advisory: chapters cleared (on the path taken, in a game that branches).
minimum: 0maximum: 60createdAt
string
datetime
Required
An RFC 3339 formatted timestamp.
day
string
Optional
For a daily game's today's run: the day played (YYYY-MM-DD, UTC), whose seeds its chapters played on. A verifier refuses a day on a game that isn't daily, and one later than today. Absent: the run that's the same every time.
maxLength: 10 bytesdifficulty
string
Optional
For a game with levels: the level played (absent is normal; granny only on a game that offers it). A verifier refuses a level on a game without them.
maxLength: 8 bytesgranny, easy, normal, hardgame
ref
com.atproto.repo.strongRef
Required
The game (a com.gamethesky.make.game record), pinned to the version played. The game may be edited in place later; a verifier replays the logs on it as it stands, so a rename keeps the run and a change of chapters retires it.
kills
integer
Optional
No description available.
minimum: 0logs
array
of
string
Required
One log a chapter played, in play order: comma-separated `<dtick>.<k>.<a>` entries, dtick being 60 Hz ticks since the previous entry and k (one digit or two) and a the input as that chapter's module takes it. Every chapter but the last played was cleared. In a game that branches, only the chapters on the path taken are played, so there may be fewer logs than chapters.
maxLength: 60 itemsminLength: 1 itemslook
string
Optional
Cosmetic: the colors the player's build wore (rrggbb.rrggbb.rrggbb: Fight the Sky's body, trim and gloves). Never read by the verifier.
maxLength: 40 bytesmakeVersion
integer
Required
The rules the run was played under, all told. A verifier must match it or refuse the run.
minimum: 1score
integer
Required
Advisory: points, all chapters together.
minimum: 0ticks
integer
Required
Advisory: 60 Hz ticks, all chapters together.
minimum: 1vs
ref
#vs
Optional
A ghost fight: the saved fighter fought, pinned to its version, and the skill it was fought at. A verifier fetches the fighter at that CID and replays against it; it never ranks.
won
boolean
Optional
Advisory: every chapter cleared (every chapter on the path taken, and the end reached, in a game that branches).
wore
ref
#wore
Optional
Cosmetic: the face the player wore as Hero 1, so a replay and the run's card show it: a Bluesky handle, or a JPEG they chose to include. Never read by the verifier.
View raw schema
{
"description": "One play of a Make the Sky game, published by the player into their own repo. It stores every input rather than trusting a score: each chapter's engine is deterministic, so replaying its log on the same game reproduces the run exactly. Owning the record is the identity proof and replaying it is the score proof; score and the rest are advisory.",
"key": "tid",
"record": {
"properties": {
"builds": {
"description": "For a game whose players build their own: the build played with, one a chapter type that takes one. Part of play: a verifier replays with it, and refuses a build the chapter type wouldn't take (or any build on a game without builds). Absent on such a game: each type's default build.",
"items": {
"ref": "#build",
"type": "ref"
},
"maxLength": 8,
"type": "array"
},
"choices": {
"description": "For a game whose story branches: the option picked at each choice scene the run reached, in order, counting from 0. With the game, they say which chapters the logs belong to; a verifier walks the path they give and refuses a run whose picks or logs don't fit it. Absent (or empty) for a game without choices.",
"items": {
"maximum": 2,
"minimum": 0,
"type": "integer"
},
"maxLength": 60,
"type": "array"
},
"cleared": {
"description": "Advisory: chapters cleared (on the path taken, in a game that branches).",
"maximum": 60,
"minimum": 0,
"type": "integer"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"day": {
"description": "For a daily game's today's run: the day played (YYYY-MM-DD, UTC), whose seeds its chapters played on. A verifier refuses a day on a game that isn't daily, and one later than today. Absent: the run that's the same every time.",
"maxLength": 10,
"type": "string"
},
"difficulty": {
"description": "For a game with levels: the level played (absent is normal; granny only on a game that offers it). A verifier refuses a level on a game without them.",
"knownValues": [
"granny",
"easy",
"normal",
"hard"
],
"maxLength": 8,
"type": "string"
},
"game": {
"description": "The game (a com.gamethesky.make.game record), pinned to the version played. The game may be edited in place later; a verifier replays the logs on it as it stands, so a rename keeps the run and a change of chapters retires it.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"kills": {
"minimum": 0,
"type": "integer"
},
"logs": {
"description": "One log a chapter played, in play order: comma-separated `<dtick>.<k>.<a>` entries, dtick being 60 Hz ticks since the previous entry and k (one digit or two) and a the input as that chapter's module takes it. Every chapter but the last played was cleared. In a game that branches, only the chapters on the path taken are played, so there may be fewer logs than chapters.",
"items": {
"maxLength": 400000,
"type": "string"
},
"maxLength": 60,
"minLength": 1,
"type": "array"
},
"look": {
"description": "Cosmetic: the colors the player's build wore (rrggbb.rrggbb.rrggbb: Fight the Sky's body, trim and gloves). Never read by the verifier.",
"maxLength": 40,
"type": "string"
},
"makeVersion": {
"description": "The rules the run was played under, all told. A verifier must match it or refuse the run.",
"minimum": 1,
"type": "integer"
},
"score": {
"description": "Advisory: points, all chapters together.",
"minimum": 0,
"type": "integer"
},
"ticks": {
"description": "Advisory: 60 Hz ticks, all chapters together.",
"minimum": 1,
"type": "integer"
},
"vs": {
"description": "A ghost fight: the saved fighter fought, pinned to its version, and the skill it was fought at. A verifier fetches the fighter at that CID and replays against it; it never ranks.",
"ref": "#vs",
"type": "ref"
},
"won": {
"description": "Advisory: every chapter cleared (every chapter on the path taken, and the end reached, in a game that branches).",
"type": "boolean"
},
"wore": {
"description": "Cosmetic: the face the player wore as Hero 1, so a replay and the run's card show it: a Bluesky handle, or a JPEG they chose to include. Never read by the verifier.",
"ref": "#wore",
"type": "ref"
}
},
"required": [
"makeVersion",
"game",
"logs",
"score",
"ticks",
"createdAt"
],
"type": "object"
},
"type": "record"
}