me.byjp.pesos.sts2.run
Schema Diff
+206 -22
Compatibility Analysis
Breaking Changes Detected
33 breaking changes, 77 non-breaking changes.
Breaking Changes (33)
- RemovedVertex RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run#ally" }
- RemovedVertex RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run#ally.atproto" }
- RemovedVertex RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run#ally.steam" }
- RemovedEdge RemovedEdge { src: "me.byjp.pesos.sts2.run#ally", tgt: "me.byjp.pesos.sts2.run#ally.atproto", kind: "prop", name: Some("atproto") }
- RemovedEdge RemovedEdge { src: "me.byjp.pesos.sts2.run#ally", tgt: "me.byjp.pesos.sts2.run#ally.steam", kind: "prop", name: Some("steam") }
- KindChanged KindChanged { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items", old_kind: "ref", new_kind: "object" }
- 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.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.elitesWon", 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.bossesWon", 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.biggestDamageDealt", 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.deaths", 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.currentHp", 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.damageTaken", 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.biggestTurnDamageTaken", 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.damageDealt", 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.combats", 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.cardsExhausted", 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#stats.noDamageTurns", 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.killCount", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "me.byjp.pesos.sts2.run#stats.lowestHp", sort: "minimum", value: "0" }
Non-Breaking Changes (77)
- 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.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.maxHp" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.stats" }
- AddedVertex AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.steamID64" }
- 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.currentHp", kind: "prop", name: Some("currentHp") }
- 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.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.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") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run#ally" }RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run#ally.atproto" }RemovedVertex { vertex_id: "me.byjp.pesos.sts2.run#ally.steam" }
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.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.maxHp" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.stats" }AddedVertex { vertex_id: "me.byjp.pesos.sts2.run:body.steamID64" }
Constraint Changes
- 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.biggestDamageDealt", 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.lowestHp", 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.killCount", 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.healingReceived", 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.potionsUsed", 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.goldSpent", 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#stats.biggestTurnDamageTaken", 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.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.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.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.damageDealt", 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.damageTaken", 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.cardsExhausted", sort: "minimum", value: "0" }
Additional Notes
- Breaking: RemovedEdge { src: "me.byjp.pesos.sts2.run#ally", tgt: "me.byjp.pesos.sts2.run#ally.atproto", kind: "prop", name: Some("atproto") }
- Breaking: RemovedEdge { src: "me.byjp.pesos.sts2.run#ally", tgt: "me.byjp.pesos.sts2.run#ally.steam", kind: "prop", name: Some("steam") }
- Breaking: KindChanged { vertex_id: "me.byjp.pesos.sts2.run:body.allies:items", old_kind: "ref", new_kind: "object" }
- 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.currentHp", kind: "prop", name: Some("currentHp") }
- 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.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.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") }
1
1
{
2
2
"id": "me.byjp.pesos.sts2.run",
3
3
"defs": {
4
-
"ally": {
5
-
"type": "object",
6
-
"required": [
7
-
"steam"
8
-
],
9
-
"properties": {
10
-
"steam": {
11
-
"type": "string",
12
-
"description": "SteamID64 as a decimal string."
13
-
},
14
-
"atproto": {
15
-
"type": "string",
16
-
"format": "did",
17
-
"description": "Atproto DID, when known."
18
-
}
19
-
},
20
-
"description": "A co-op peer. Identified by SteamID64 always; an atproto DID is included when we've resolved one for this Steam user."
21
-
},
22
4
"main": {
23
5
"key": "tid",
24
6
"type": "record",
25
7
"record": {
26
8
"type": "object",
27
9
"required": [
28
10
"outcome",
29
11
"character",
30
12
"ascension",
31
13
"seed",
32
14
"startedAt",
33
15
"updatedAt"
34
16
],
35
17
"properties": {
36
18
"act": {
37
19
"type": "integer",
38
20
"maximum": 4,
39
21
"minimum": 1
40
22
},
41
23
"deck": {
42
24
"type": "array",
43
25
"items": {
44
26
"type": "string"
45
27
},
46
-
"description": "Card ids in the player's deck."
28
+
"description": "Card ids in the final deck."
47
29
},
48
30
"game": {
49
31
"type": "string",
50
32
"format": "at-uri",
51
33
"description": "Optional at-uri of the canonical games.gamesgamesgamesgames.actor.game record for StS2."
52
34
},
53
35
"seed": {
54
36
"type": "string",
55
37
"description": "Run seed as displayed in-game."
56
38
},
57
39
"floor": {
58
40
"type": "integer",
59
41
"minimum": 0
60
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
+
},
61
48
"score": {
62
49
"type": "integer",
63
50
"minimum": 0
64
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
+
},
65
57
"allies": {
66
58
"type": "array",
67
59
"items": {
68
-
"ref": "#ally",
69
-
"type": "ref"
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
+
}
70
75
},
71
-
"description": "Other players in a multiplayer run. Each entry always carries the peer's SteamID64; when we've been able to resolve it, the atproto DID is included too."
76
+
"description": "Other players in a multiplayer run."
72
77
},
73
78
"relics": {
74
79
"type": "array",
75
80
"items": {
76
81
"type": "string"
77
82
},
78
83
"description": "Relic ids held at run end."
79
84
},
80
85
"endedAt": {
81
86
"type": "string",
82
87
"format": "datetime"
83
88
},
84
89
"outcome": {
85
90
"type": "string",
86
91
"description": "How the run ended.",
87
92
"knownValues": [
88
93
"in_progress",
89
94
"victory",
90
95
"death",
91
96
"abandoned"
92
97
]
93
98
},
94
99
"potions": {
95
100
"type": "array",
96
101
"items": {
97
102
"type": "string"
98
103
},
99
104
"description": "Potion ids currently held."
100
105
},
101
106
"killedBy": {
102
107
"type": "string",
103
108
"description": "Enemy / event that ended the run, if applicable."
104
109
},
105
110
"statsRef": {
106
111
"type": "string",
107
112
"format": "at-uri",
108
113
"description": "at-uri of the user's games.gamesgamesgamesgames.actor.stats record for StS2, updated alongside this run."
109
114
},
110
115
"ascension": {
111
116
"type": "integer",
112
117
"maximum": 20,
113
118
"minimum": 0
114
119
},
115
120
"character": {
116
121
"type": "string",
117
122
"description": "Character class id (e.g. 'ironclad', 'silent')."
118
123
},
124
+
"currentHp": {
125
+
"type": "integer",
126
+
"minimum": 0,
127
+
"description": "Local player's current HP at the time of emission (0 if dead)."
128
+
},
119
129
"startedAt": {
120
130
"type": "string",
121
131
"format": "datetime"
122
132
},
133
+
"steamID64": {
134
+
"type": "string",
135
+
"description": "SteamID64 of the run's owner, when playing on Steam."
136
+
},
123
137
"updatedAt": {
124
138
"type": "string",
125
139
"format": "datetime"
126
140
},
127
141
"modVersion": {
128
142
"type": "string"
129
143
},
130
144
"gameVersion": {
131
145
"type": "string"
132
146
},
133
147
"durationSeconds": {
134
148
"type": "integer",
135
149
"minimum": 0
136
150
}
137
151
}
138
152
},
139
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."
140
324
}
141
325
},
142
326
"$type": "com.atproto.lexicon.schema",
143
327
"lexicon": 1
144
328
}