me.byjp.pesos.sts2.run
Schema Diff
+230 -14
Compatibility Analysis
Breaking Changes Detected
36 breaking changes, 94 non-breaking changes.
Breaking Changes (36)
- RemovedVertex RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.createdAt" }
- RemovedVertex RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.finalAct" }
- RemovedVertex RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.finalFloor" }
- RemovedEdge RemovedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.createdAt", kind: "prop", name: Some("createdAt") }
- RemovedEdge RemovedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.finalAct", kind: "prop", name: Some("finalAct") }
- RemovedEdge RemovedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.finalFloor", kind: "prop", name: Some("finalFloor") }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageDealt", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.bossesWon", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsDrawn", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsPlayed", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageTaken", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.goldEarned", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.currentHp", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.highestBlockInTurn", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.goldCurrent", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.turns", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.combatsWon", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.combats", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.elitesWon", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.deaths", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageTaken", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.damageDealt", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.killCount", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.noDamageTurns", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.potionsUsed", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.goldSpent", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.floor", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.act", sort: "minimum", value: "1" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.act", sort: "maximum", value: "4" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageDealt", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.longestCombat", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.maxHp", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.lowestHp", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsExhausted", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.healingReceived", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.damageTaken", sort: "minimum", value: "0" }
Non-Breaking Changes (94)
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation.cid" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation.key" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation.signature" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#distribution" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageDealt" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageTaken" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageDealt" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageTaken" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.bossesWon" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardUseDistribution" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsDrawn" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsExhausted" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsPlayed" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.combats" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.combatsWon" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.damageDealt" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.damageTaken" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.deaths" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.elitesWon" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.goldCurrent" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.goldEarned" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.goldSpent" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.healingReceived" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.highestBlockInTurn" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.hitsDealtDistribution" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.hitsTakenDistribution" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.killCount" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.longestCombat" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.lowestHp" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.noDamageTurns" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.potionsUsed" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.turns" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.act" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items.atproto" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items.steam" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.currentHp" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.floor" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.maxHp" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.potions" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.potions:items" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.stats" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.steamID64" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.updatedAt" }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#attestation", tgt: "me.byjp.pesos.sts2.run#attestation.cid", kind: "prop", name: Some("cid") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#attestation", tgt: "me.byjp.pesos.sts2.run#attestation.key", kind: "prop", name: Some("key") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#attestation", tgt: "me.byjp.pesos.sts2.run#attestation.signature", kind: "prop", name: Some("signature") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestDamageDealt", kind: "prop", name: Some("biggestDamageDealt") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestDamageTaken", kind: "prop", name: Some("biggestDamageTaken") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageDealt", kind: "prop", name: Some("biggestTurnDamageDealt") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageTaken", kind: "prop", name: Some("biggestTurnDamageTaken") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.bossesWon", kind: "prop", name: Some("bossesWon") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardUseDistribution", kind: "prop", name: Some("cardUseDistribution") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardsDrawn", kind: "prop", name: Some("cardsDrawn") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardsExhausted", kind: "prop", name: Some("cardsExhausted") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardsPlayed", kind: "prop", name: Some("cardsPlayed") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.combats", kind: "prop", name: Some("combats") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.combatsWon", kind: "prop", name: Some("combatsWon") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.damageDealt", kind: "prop", name: Some("damageDealt") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.damageTaken", kind: "prop", name: Some("damageTaken") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.deaths", kind: "prop", name: Some("deaths") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.elitesWon", kind: "prop", name: Some("elitesWon") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.goldCurrent", kind: "prop", name: Some("goldCurrent") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.goldEarned", kind: "prop", name: Some("goldEarned") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.goldSpent", kind: "prop", name: Some("goldSpent") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.healingReceived", kind: "prop", name: Some("healingReceived") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.highestBlockInTurn", kind: "prop", name: Some("highestBlockInTurn") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.hitsDealtDistribution", kind: "prop", name: Some("hitsDealtDistribution") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.hitsTakenDistribution", kind: "prop", name: Some("hitsTakenDistribution") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.killCount", kind: "prop", name: Some("killCount") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.longestCombat", kind: "prop", name: Some("longestCombat") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.lowestHp", kind: "prop", name: Some("lowestHp") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.noDamageTurns", kind: "prop", name: Some("noDamageTurns") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.potionsUsed", kind: "prop", name: Some("potionsUsed") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.turns", kind: "prop", name: Some("turns") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.act", kind: "prop", name: Some("act") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.allies", kind: "prop", name: Some("allies") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.currentHp", kind: "prop", name: Some("currentHp") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.floor", kind: "prop", name: Some("floor") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.maxHp", kind: "prop", name: Some("maxHp") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.potions", kind: "prop", name: Some("potions") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.stats", kind: "prop", name: Some("stats") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.steamID64", kind: "prop", name: Some("steamID64") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body.allies", tgt: "me.byjp.pesos.sts2.run:body.allies:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body.allies:items", tgt: "me.byjp.pesos.sts2.run:body.allies:items.atproto", kind: "prop", name: Some("atproto") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body.allies:items", tgt: "me.byjp.pesos.sts2.run:body.allies:items.steam", kind: "prop", name: Some("steam") }
- AddedEdge AddedEdge { src: "me.byjp.pesos.sts2.run:body.potions", tgt: "me.byjp.pesos.sts2.run:body.potions:items", kind: "items", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "me.byjp.pesos.sts2.run:body.finalFloor", sort: "minimum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "me.byjp.pesos.sts2.run:body.finalAct", sort: "minimum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "me.byjp.pesos.sts2.run:body.finalAct", sort: "maximum" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.createdAt" }RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.finalAct" }RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.finalFloor" }
Added Elements
AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation.cid" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation.key" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#attestation.signature" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#distribution" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageDealt" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageTaken" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageDealt" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageTaken" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.bossesWon" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardUseDistribution" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsDrawn" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsExhausted" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsPlayed" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.combats" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.combatsWon" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.damageDealt" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.damageTaken" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.deaths" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.elitesWon" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.goldCurrent" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.goldEarned" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.goldSpent" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.healingReceived" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.highestBlockInTurn" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.hitsDealtDistribution" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.hitsTakenDistribution" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.killCount" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.longestCombat" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.lowestHp" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.noDamageTurns" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.potionsUsed" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run#stats.turns" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.act" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items.atproto" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items.steam" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.currentHp" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.floor" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.maxHp" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.potions" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.potions:items" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.stats" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.steamID64" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.updatedAt" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.damageDealt", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.damageTaken", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.bossesWon", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.combats", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.noDamageTurns", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageTaken", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.highestBlockInTurn", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.elitesWon", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.killCount", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.longestCombat", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.floor", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.lowestHp", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.combatsWon", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.act", sort: "maximum", value: "4" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.act", sort: "minimum", value: "1" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsExhausted", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.deaths", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.goldEarned", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsDrawn", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.maxHp", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run:body.currentHp", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageTaken", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestDamageDealt", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.healingReceived", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageDealt", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.turns", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.goldSpent", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.potionsUsed", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.goldCurrent", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.cardsPlayed", sort: "minimum", value: "0" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "me.byjp.pesos.sts2.run:body.finalAct", sort: "maximum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "me.byjp.pesos.sts2.run:body.finalAct", sort: "minimum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "me.byjp.pesos.sts2.run:body.finalFloor", sort: "minimum" }
Additional Notes
- Breaking: RemovedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.createdAt", kind: "prop", name: Some("createdAt") }
- Breaking: RemovedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.finalAct", kind: "prop", name: Some("finalAct") }
- Breaking: RemovedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.finalFloor", kind: "prop", name: Some("finalFloor") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#attestation", tgt: "me.byjp.pesos.sts2.run#attestation.cid", kind: "prop", name: Some("cid") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#attestation", tgt: "me.byjp.pesos.sts2.run#attestation.key", kind: "prop", name: Some("key") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#attestation", tgt: "me.byjp.pesos.sts2.run#attestation.signature", kind: "prop", name: Some("signature") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestDamageDealt", kind: "prop", name: Some("biggestDamageDealt") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestDamageTaken", kind: "prop", name: Some("biggestDamageTaken") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageDealt", kind: "prop", name: Some("biggestTurnDamageDealt") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.biggestTurnDamageTaken", kind: "prop", name: Some("biggestTurnDamageTaken") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.bossesWon", kind: "prop", name: Some("bossesWon") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardUseDistribution", kind: "prop", name: Some("cardUseDistribution") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardsDrawn", kind: "prop", name: Some("cardsDrawn") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardsExhausted", kind: "prop", name: Some("cardsExhausted") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.cardsPlayed", kind: "prop", name: Some("cardsPlayed") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.combats", kind: "prop", name: Some("combats") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.combatsWon", kind: "prop", name: Some("combatsWon") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.damageDealt", kind: "prop", name: Some("damageDealt") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.damageTaken", kind: "prop", name: Some("damageTaken") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.deaths", kind: "prop", name: Some("deaths") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.elitesWon", kind: "prop", name: Some("elitesWon") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.goldCurrent", kind: "prop", name: Some("goldCurrent") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.goldEarned", kind: "prop", name: Some("goldEarned") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.goldSpent", kind: "prop", name: Some("goldSpent") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.healingReceived", kind: "prop", name: Some("healingReceived") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.highestBlockInTurn", kind: "prop", name: Some("highestBlockInTurn") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.hitsDealtDistribution", kind: "prop", name: Some("hitsDealtDistribution") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.hitsTakenDistribution", kind: "prop", name: Some("hitsTakenDistribution") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.killCount", kind: "prop", name: Some("killCount") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.longestCombat", kind: "prop", name: Some("longestCombat") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.lowestHp", kind: "prop", name: Some("lowestHp") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.noDamageTurns", kind: "prop", name: Some("noDamageTurns") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.potionsUsed", kind: "prop", name: Some("potionsUsed") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run#stats", tgt: "me.byjp.pesos.sts2.run#stats.turns", kind: "prop", name: Some("turns") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.act", kind: "prop", name: Some("act") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.allies", kind: "prop", name: Some("allies") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.currentHp", kind: "prop", name: Some("currentHp") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.floor", kind: "prop", name: Some("floor") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.maxHp", kind: "prop", name: Some("maxHp") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.potions", kind: "prop", name: Some("potions") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.stats", kind: "prop", name: Some("stats") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.steamID64", kind: "prop", name: Some("steamID64") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body", tgt: "me.byjp.pesos.sts2.run:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body.allies", tgt: "me.byjp.pesos.sts2.run:body.allies:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body.allies:items", tgt: "me.byjp.pesos.sts2.run:body.allies:items.atproto", kind: "prop", name: Some("atproto") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body.allies:items", tgt: "me.byjp.pesos.sts2.run:body.allies:items.steam", kind: "prop", name: Some("steam") }
- Non-breaking: AddedEdge { src: "me.byjp.pesos.sts2.run:body.potions", tgt: "me.byjp.pesos.sts2.run:body.potions:items", kind: "items", name: None }
1
1
{
2
2
"id": "me.byjp.pesos.sts2.run",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"outcome",
11
11
"character",
12
12
"ascension",
13
13
"seed",
14
-
"finalFloor",
15
14
"startedAt",
16
-
"endedAt",
17
-
"createdAt"
15
+
"updatedAt"
18
16
],
19
17
"properties": {
18
+
"act": {
19
+
"type": "integer",
20
+
"maximum": 4,
21
+
"minimum": 1
22
+
},
20
23
"deck": {
21
24
"type": "array",
22
25
"items": {
23
26
"type": "string"
24
27
},
25
28
"description": "Card ids in the final deck."
26
29
},
27
30
"game": {
28
31
"type": "string",
29
32
"format": "at-uri",
30
33
"description": "Optional at-uri of the canonical games.gamesgamesgamesgames.actor.game record for StS2."
31
34
},
32
35
"seed": {
33
36
"type": "string",
34
37
"description": "Run seed as displayed in-game."
35
38
},
39
+
"floor": {
40
+
"type": "integer",
41
+
"minimum": 0
42
+
},
43
+
"maxHp": {
44
+
"type": "integer",
45
+
"minimum": 0,
46
+
"description": "Local player's maximum HP at the time of emission (reflects run-long HP gains/losses)."
47
+
},
36
48
"score": {
37
49
"type": "integer",
38
50
"minimum": 0
39
51
},
52
+
"stats": {
53
+
"ref": "lex:me.byjp.pesos.sts2.run#stats",
54
+
"type": "ref",
55
+
"description": "Aggregated combat stats across the run. All fields optional; counters reflect the local player's own activity."
56
+
},
57
+
"allies": {
58
+
"type": "array",
59
+
"items": {
60
+
"type": "object",
61
+
"required": [
62
+
"steam"
63
+
],
64
+
"properties": {
65
+
"steam": {
66
+
"type": "string",
67
+
"description": "SteamID64 as a decimal string."
68
+
},
69
+
"atproto": {
70
+
"type": "string",
71
+
"format": "did",
72
+
"description": "Atproto DID, when known."
73
+
}
74
+
}
75
+
},
76
+
"description": "Other players in a multiplayer run."
77
+
},
40
78
"relics": {
41
79
"type": "array",
42
80
"items": {
43
81
"type": "string"
44
82
},
45
83
"description": "Relic ids held at run end."
46
84
},
47
85
"endedAt": {
48
86
"type": "string",
49
87
"format": "datetime"
50
88
},
51
89
"outcome": {
52
90
"type": "string",
53
91
"description": "How the run ended.",
54
92
"knownValues": [
93
+
"in_progress",
55
94
"victory",
56
95
"death",
57
96
"abandoned"
58
97
]
59
98
},
60
-
"finalAct": {
61
-
"type": "integer",
62
-
"maximum": 4,
63
-
"minimum": 1
99
+
"potions": {
100
+
"type": "array",
101
+
"items": {
102
+
"type": "string"
103
+
},
104
+
"description": "Potion ids currently held."
64
105
},
65
106
"killedBy": {
66
107
"type": "string",
67
108
"description": "Enemy / event that ended the run, if applicable."
68
109
},
69
110
"statsRef": {
70
111
"type": "string",
71
112
"format": "at-uri",
72
113
"description": "at-uri of the user's games.gamesgamesgamesgames.actor.stats record for StS2, updated alongside this run."
73
114
},
74
115
"ascension": {
75
116
"type": "integer",
76
117
"maximum": 20,
77
118
"minimum": 0
78
119
},
79
120
"character": {
80
121
"type": "string",
81
122
"description": "Character class id (e.g. 'ironclad', 'silent')."
82
123
},
83
-
"createdAt": {
124
+
"currentHp": {
125
+
"type": "integer",
126
+
"minimum": 0,
127
+
"description": "Local player's current HP at the time of emission (0 if dead)."
128
+
},
129
+
"startedAt": {
84
130
"type": "string",
85
131
"format": "datetime"
86
132
},
87
-
"startedAt": {
133
+
"steamID64": {
134
+
"type": "string",
135
+
"description": "SteamID64 of the run's owner, when playing on Steam."
136
+
},
137
+
"updatedAt": {
88
138
"type": "string",
89
139
"format": "datetime"
90
-
},
91
-
"finalFloor": {
92
-
"type": "integer",
93
-
"minimum": 0
94
140
},
95
141
"modVersion": {
96
142
"type": "string"
97
143
},
98
144
"gameVersion": {
99
145
"type": "string"
100
146
},
101
147
"durationSeconds": {
102
148
"type": "integer",
103
149
"minimum": 0
104
150
}
105
151
}
106
152
},
107
-
"description": "A single completed Slay the Spire 2 run."
153
+
"description": "A single Slay the Spire 2 run."
154
+
},
155
+
"stats": {
156
+
"type": "object",
157
+
"properties": {
158
+
"turns": {
159
+
"type": "integer",
160
+
"minimum": 0,
161
+
"description": "Total player turns taken across all combats."
162
+
},
163
+
"deaths": {
164
+
"type": "integer",
165
+
"minimum": 0,
166
+
"description": "Number of times the player went to 0 HP. 0 in solo victory; can exceed 1 in multiplayer where allies revive."
167
+
},
168
+
"combats": {
169
+
"type": "integer",
170
+
"minimum": 0,
171
+
"description": "Total combats entered."
172
+
},
173
+
"lowestHp": {
174
+
"type": "integer",
175
+
"minimum": 0,
176
+
"description": "Lowest HP the player reached at any tracked moment in the run."
177
+
},
178
+
"bossesWon": {
179
+
"type": "integer",
180
+
"minimum": 0,
181
+
"description": "Boss combats won."
182
+
},
183
+
"elitesWon": {
184
+
"type": "integer",
185
+
"minimum": 0,
186
+
"description": "Elite combats won."
187
+
},
188
+
"goldSpent": {
189
+
"type": "integer",
190
+
"minimum": 0,
191
+
"description": "Total gold spent over the run."
192
+
},
193
+
"killCount": {
194
+
"type": "integer",
195
+
"minimum": 0,
196
+
"description": "Number of monsters this player dealt the killing blow to."
197
+
},
198
+
"cardsDrawn": {
199
+
"type": "integer",
200
+
"minimum": 0
201
+
},
202
+
"combatsWon": {
203
+
"type": "integer",
204
+
"minimum": 0,
205
+
"description": "Combats the player's side won."
206
+
},
207
+
"goldEarned": {
208
+
"type": "integer",
209
+
"minimum": 0,
210
+
"description": "Total gold gained over the run."
211
+
},
212
+
"cardsPlayed": {
213
+
"type": "integer",
214
+
"minimum": 0
215
+
},
216
+
"damageDealt": {
217
+
"type": "integer",
218
+
"minimum": 0,
219
+
"description": "Total HP damage dealt by the player to enemies (after block)."
220
+
},
221
+
"damageTaken": {
222
+
"type": "integer",
223
+
"minimum": 0,
224
+
"description": "Total HP damage taken by the player (after block)."
225
+
},
226
+
"goldCurrent": {
227
+
"type": "integer",
228
+
"minimum": 0,
229
+
"description": "Gold the player is currently holding at the time of emission."
230
+
},
231
+
"potionsUsed": {
232
+
"type": "integer",
233
+
"minimum": 0
234
+
},
235
+
"longestCombat": {
236
+
"type": "integer",
237
+
"minimum": 0,
238
+
"description": "Most player turns in a single combat."
239
+
},
240
+
"noDamageTurns": {
241
+
"type": "integer",
242
+
"minimum": 0,
243
+
"description": "Enemy turns during which the player took zero unblocked damage."
244
+
},
245
+
"cardsExhausted": {
246
+
"type": "integer",
247
+
"minimum": 0
248
+
},
249
+
"healingReceived": {
250
+
"type": "integer",
251
+
"minimum": 0,
252
+
"description": "Total HP healed by the player across the run (sum of positive HP changes)."
253
+
},
254
+
"biggestDamageDealt": {
255
+
"type": "integer",
256
+
"minimum": 0,
257
+
"description": "Largest HP damage dealt by the player in one attack (after block)."
258
+
},
259
+
"biggestDamageTaken": {
260
+
"type": "integer",
261
+
"minimum": 0,
262
+
"description": "Largest HP damage taken by the player in one attack (after block)."
263
+
},
264
+
"highestBlockInTurn": {
265
+
"type": "integer",
266
+
"minimum": 0,
267
+
"description": "Most block gained by the player in a single player turn."
268
+
},
269
+
"cardUseDistribution": {
270
+
"ref": "#distribution",
271
+
"type": "ref",
272
+
"description": "Cards played, keyed by card name (id) mapped to the number of times that card was played. Example: { \"strike\": 42, \"bash\": 6 }."
273
+
},
274
+
"hitsDealtDistribution": {
275
+
"ref": "#distribution",
276
+
"type": "ref",
277
+
"description": "Hits dealt by the player grouped by the attack's full value (before block). Example: { \"1\": 23, \"2\": 8, \"10\": 1 }."
278
+
},
279
+
"hitsTakenDistribution": {
280
+
"ref": "#distribution",
281
+
"type": "ref",
282
+
"description": "Hits the player received grouped by the attack's full value (before block). Example: { \"1\": 23, \"2\": 8, \"10\": 1 }."
283
+
},
284
+
"biggestTurnDamageDealt": {
285
+
"type": "integer",
286
+
"minimum": 0,
287
+
"description": "Most HP damage the player dealt in one player turn (after block)."
288
+
},
289
+
"biggestTurnDamageTaken": {
290
+
"type": "integer",
291
+
"minimum": 0,
292
+
"description": "Most HP damage the player took in one enemy turn (after block)."
293
+
}
294
+
}
295
+
},
296
+
"attestation": {
297
+
"type": "object",
298
+
"required": [
299
+
"cid",
300
+
"key",
301
+
"signature"
302
+
],
303
+
"properties": {
304
+
"cid": {
305
+
"type": "string",
306
+
"description": "CIDv1 (DAG-CBOR + SHA-256) of the record body that was signed."
307
+
},
308
+
"key": {
309
+
"type": "string",
310
+
"format": "did",
311
+
"description": "did:key identifying the signing key."
312
+
},
313
+
"signature": {
314
+
"type": "bytes",
315
+
"description": "P-256 ECDSA signature (low-S, IEEE P1363 r‖s) over the content CID bytes."
316
+
}
317
+
},
318
+
"description": "Inline ECDSA signature appended to the record's `signatures` array after the content CID is computed (per badge.blue). The `signatures` array is stripped before re-validation; entries identify the signing key so verifiers can look it up against a trusted-keys list to confirm a genuine mod build. The canonical list lives at https://sts2.byjp.me/.well-known/sts2-mod-keys/keys.json — other verifiers may publish their own at the same well-known path on a different host."
319
+
},
320
+
"distribution": {
321
+
"type": "object",
322
+
"properties": {},
323
+
"description": "Generic histogram keyed by arbitrary string values mapped to their integer counts. Keys are intentionally undeclared because the set of values is open-ended."
108
324
}
109
325
},
110
326
"$type": "com.atproto.lexicon.schema",
111
327
"lexicon": 1
112
328
}