{
"id": "net.anisota.lab.nightsky.session",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"startedAt",
"endedAt",
"durationMs",
"totalWitnessed",
"createdAt"
],
"properties": {
"endedAt": {
"type": "string",
"format": "datetime",
"description": "When the gazing session ended"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the session record was created"
},
"signature": {
"ref": "#chronicleSignature",
"type": "ref",
"description": "ES256 signature proving the record came from the Anisota app"
},
"startedAt": {
"type": "string",
"format": "datetime",
"description": "When the gazing session began"
},
"timeModes": {
"type": "array",
"items": {
"enum": [
"night",
"day",
"24h"
],
"type": "string"
},
"maxLength": 8,
"description": "Which time-of-day modes were viewed during the session"
},
"witnessed": {
"ref": "#witnessedTally",
"type": "ref",
"description": "Per-kind counts of what was witnessed"
},
"durationMs": {
"type": "integer",
"minimum": 0,
"description": "How long the session lasted, in milliseconds"
},
"lookAround": {
"type": "boolean",
"description": "Whether the 360° look-around dome was used during the session"
},
"totalWitnessed": {
"type": "integer",
"minimum": 0,
"description": "Total number of things witnessed in the viewfinder this session (sum of the witnessed tally)"
}
}
},
"description": "A record of one sky-gazing session in the Anisota Lab's Nightsky experiment, saved to the gazer's PDS. Captures how long they watched, how they were watching, and a tally of everything their viewfinder witnessed. Like Chronicle records, each session carries an ES256 signature minted by the Anisota backend, so the data can be verified to have come from the app rather than being hand-written."
},
"witnessedTally": {
"type": "object",
"properties": {
"bats": {
"type": "integer",
"minimum": 0
},
"bugs": {
"type": "integer",
"minimum": 0
},
"owls": {
"type": "integer",
"minimum": 0
},
"ufos": {
"type": "integer",
"minimum": 0
},
"birds": {
"type": "integer",
"minimum": 0
},
"rains": {
"type": "integer",
"minimum": 0
},
"comets": {
"type": "integer",
"minimum": 0
},
"glints": {
"type": "integer",
"minimum": 0
},
"planes": {
"type": "integer",
"minimum": 0
},
"auroras": {
"type": "integer",
"minimum": 0
},
"critters": {
"type": "integer",
"minimum": 0
},
"anomalies": {
"type": "integer",
"minimum": 0
},
"jetTrails": {
"type": "integer",
"minimum": 0
},
"moonrises": {
"type": "integer",
"minimum": 0
},
"satellites": {
"type": "integer",
"minimum": 0
},
"meteorStorms": {
"type": "integer",
"minimum": 0
},
"meteorShowers": {
"type": "integer",
"minimum": 0
},
"shootingStars": {
"type": "integer",
"minimum": 0
}
},
"description": "Per-kind counts of celestial and daytime sights witnessed in the viewfinder"
},
"chronicleSignature": {
"type": "object",
"required": [
"sig",
"alg",
"kid",
"signedAt",
"nonce",
"version"
],
"properties": {
"alg": {
"type": "string",
"description": "Signing algorithm (ES256)"
},
"kid": {
"type": "string",
"description": "Key identifier for the signing key"
},
"sig": {
"type": "string",
"description": "Base64-encoded ES256 signature"
},
"nonce": {
"type": "string",
"description": "Unique random nonce to prevent replay"
},
"version": {
"type": "integer",
"description": "Signature schema version"
},
"signedAt": {
"type": "string",
"format": "datetime",
"description": "When the record was signed"
}
},
"description": "ES256 cryptographic signature proving record authenticity"
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}