at.margin.note

margin.at

Schema Diff

+58 -160

From

CID
bafyreibssczqcn3...
Indexed At
2026-04-10 11:56 UTC
View this version

To

CID
bafyreid6ne3xawo...
Indexed At
2026-04-10 17:45 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

78 breaking changes, 34 non-breaking changes.

Breaking Changes (78)
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#cssSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#cssSelector.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#cssSelector.value" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.conformsTo" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.value" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant0" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant1" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant2" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant3" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant0" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant1" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant2" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant3" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant0" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant1" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant2" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant3" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant4" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant5" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.end" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.start" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.exact" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.prefix" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.suffix" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#xpathSelector" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#xpathSelector.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.margin.note#xpathSelector.value" }
  • RemovedEdge RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.value", kind: "prop", name: Some("value") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.conformsTo", kind: "prop", name: Some("conformsTo") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.value", kind: "prop", name: Some("value") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.endSelector", kind: "prop", name: Some("endSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.startSelector", kind: "prop", name: Some("startSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant2", kind: "variant", name: Some("#cssSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant2", kind: "variant", name: Some("#cssSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant1", kind: "variant", name: Some("#textPositionSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant2", kind: "variant", name: Some("#cssSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant3", kind: "variant", name: Some("#xpathSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant4", kind: "variant", name: Some("#fragmentSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant5", kind: "variant", name: Some("#rangeSelector") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.end", kind: "prop", name: Some("end") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.start", kind: "prop", name: Some("start") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.exact", kind: "prop", name: Some("exact") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.prefix", kind: "prop", name: Some("prefix") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.suffix", kind: "prop", name: Some("suffix") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.value", kind: "prop", name: Some("value") }
  • KindChanged KindChanged { vertex_id: "at.margin.note#target.selector", old_kind: "union", new_kind: "ref" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.value", sort: "maxLength", value: "2000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxLength", value: "500" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxGraphemes", value: "150" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxLength", value: "5000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxGraphemes", value: "1500" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.start", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.end", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxLength", value: "500" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxGraphemes", value: "150" }
Non-Breaking Changes (34)
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.conformsTo" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.end" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.exact" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.prefix" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.start" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.suffix" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.type" }
  • AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.value" }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.conformsTo", kind: "prop", name: Some("conformsTo") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.end", kind: "prop", name: Some("end") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.exact", kind: "prop", name: Some("exact") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.prefix", kind: "prop", name: Some("prefix") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.start", kind: "prop", name: Some("start") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.suffix", kind: "prop", name: Some("suffix") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.value", kind: "prop", name: Some("value") }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.value", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#rangeSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.value", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.value", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.start", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.end", sort: "minimum" }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.margin.note#cssSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#cssSelector.type" }
  • RemovedVertex { vertex_id: "at.margin.note#cssSelector.value" }
  • RemovedVertex { vertex_id: "at.margin.note#fragmentSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.conformsTo" }
  • RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.type" }
  • RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.value" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant0" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant1" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant2" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant3" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant0" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant1" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant2" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant3" }
  • RemovedVertex { vertex_id: "at.margin.note#rangeSelector.type" }
  • RemovedVertex { vertex_id: "at.margin.note#target.selector:variant0" }
  • RemovedVertex { vertex_id: "at.margin.note#target.selector:variant1" }
  • RemovedVertex { vertex_id: "at.margin.note#target.selector:variant2" }
  • RemovedVertex { vertex_id: "at.margin.note#target.selector:variant3" }
  • RemovedVertex { vertex_id: "at.margin.note#target.selector:variant4" }
  • RemovedVertex { vertex_id: "at.margin.note#target.selector:variant5" }
  • RemovedVertex { vertex_id: "at.margin.note#textPositionSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.end" }
  • RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.start" }
  • RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.type" }
  • RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.exact" }
  • RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.prefix" }
  • RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.suffix" }
  • RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.type" }
  • RemovedVertex { vertex_id: "at.margin.note#xpathSelector" }
  • RemovedVertex { vertex_id: "at.margin.note#xpathSelector.type" }
  • RemovedVertex { vertex_id: "at.margin.note#xpathSelector.value" }

Added Elements

  • AddedVertex { vertex_id: "at.margin.note#selector" }
  • AddedVertex { vertex_id: "at.margin.note#selector.conformsTo" }
  • AddedVertex { vertex_id: "at.margin.note#selector.end" }
  • AddedVertex { vertex_id: "at.margin.note#selector.exact" }
  • AddedVertex { vertex_id: "at.margin.note#selector.prefix" }
  • AddedVertex { vertex_id: "at.margin.note#selector.start" }
  • AddedVertex { vertex_id: "at.margin.note#selector.suffix" }
  • AddedVertex { vertex_id: "at.margin.note#selector.type" }
  • AddedVertex { vertex_id: "at.margin.note#selector.value" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.start", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxGraphemes", value: "1500" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxLength", value: "5000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.value", sort: "maxLength", value: "2000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxLength", value: "500" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxGraphemes", value: "150" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxLength", value: "500" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxGraphemes", value: "150" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.end", sort: "minimum", value: "0" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.value", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.start", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.value", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.end", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#rangeSelector.type", sort: "const" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.value", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.type", sort: "const" }

Additional Notes

  • Breaking: RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.value", kind: "prop", name: Some("value") }
  • Breaking: RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.conformsTo", kind: "prop", name: Some("conformsTo") }
  • Breaking: RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.value", kind: "prop", name: Some("value") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.endSelector", kind: "prop", name: Some("endSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.startSelector", kind: "prop", name: Some("startSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant2", kind: "variant", name: Some("#cssSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant2", kind: "variant", name: Some("#cssSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant1", kind: "variant", name: Some("#textPositionSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant2", kind: "variant", name: Some("#cssSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant3", kind: "variant", name: Some("#xpathSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant4", kind: "variant", name: Some("#fragmentSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant5", kind: "variant", name: Some("#rangeSelector") }
  • Breaking: RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.end", kind: "prop", name: Some("end") }
  • Breaking: RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.start", kind: "prop", name: Some("start") }
  • Breaking: RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.exact", kind: "prop", name: Some("exact") }
  • Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.prefix", kind: "prop", name: Some("prefix") }
  • Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.suffix", kind: "prop", name: Some("suffix") }
  • Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.value", kind: "prop", name: Some("value") }
  • Breaking: KindChanged { vertex_id: "at.margin.note#target.selector", old_kind: "union", new_kind: "ref" }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.conformsTo", kind: "prop", name: Some("conformsTo") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.end", kind: "prop", name: Some("end") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.exact", kind: "prop", name: Some("exact") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.prefix", kind: "prop", name: Some("prefix") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.start", kind: "prop", name: Some("start") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.suffix", kind: "prop", name: Some("suffix") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.value", kind: "prop", name: Some("value") }
1 1
{
2 2
  "id": "at.margin.note",
3 3
  "defs": {
4 4
    "body": {
5 5
      "type": "object",
6 6
      "properties": {
7 7
        "uri": {
8 8
          "type": "string",
9 9
          "format": "uri",
10 10
          "description": "Reference to external body content"
11 11
        },
12 12
        "value": {
13 13
          "type": "string",
14 14
          "maxLength": 10000,
15 15
          "description": "Text content of the annotation. For bookmarks, this is the description.",
16 16
          "maxGraphemes": 3000
17 17
        },
18 18
        "format": {
19 19
          "type": "string",
20 20
          "default": "text/plain",
21 21
          "description": "MIME type of the body content"
22 22
        }
23 23
      },
24 24
      "description": "Annotation body - the content of the annotation"
25 25
    },
26 26
    "main": {
27 27
      "key": "tid",
28 28
      "type": "record",
29 29
      "record": {
30 30
        "type": "object",
31 31
        "required": [
32 32
          "motivation",
33 33
          "target",
34 34
          "createdAt"
35 35
        ],
36 36
        "properties": {
37 37
          "body": {
38 38
            "ref": "#body",
39 39
            "type": "ref",
40 40
            "description": "The annotation content (text or reference). For bookmarks, use body.value for the description."
41 41
          },
42 42
          "tags": {
43 43
            "type": "array",
44 44
            "items": {
45 45
              "type": "string",
46 46
              "maxLength": 64,
47 47
              "maxGraphemes": 32
48 48
            },
49 49
            "maxLength": 10,
50 50
            "description": "Tags for categorization"
51 51
          },
52 52
          "color": {
53 53
            "type": "string",
54 54
            "maxLength": 20,
55 -
            "description": "Highlight color tint (ATProto extension)"
55 +
            "description": "Highlight color tint"
56 56
          },
57 57
          "facets": {
58 58
            "type": "array",
59 59
            "items": {
60 60
              "ref": "app.bsky.richtext.facet",
61 61
              "type": "ref"
62 62
            },
63 63
            "description": "Rich text facets (e.g. mentions, links)"
64 64
          },
65 65
          "labels": {
66 66
            "ref": "com.atproto.label.defs#selfLabels",
67 67
            "type": "ref",
68 68
            "description": "Self-applied content labels for this annotation"
69 69
          },
70 70
          "rights": {
71 71
            "type": "string",
72 72
            "format": "uri",
73 73
            "description": "License URI (e.g., https://creativecommons.org/licenses/by/4.0/)"
74 74
          },
75 75
          "target": {
76 76
            "ref": "#target",
77 77
            "type": "ref",
78 78
            "description": "The resource being annotated with optional selector"
79 79
          },
80 80
          "createdAt": {
81 81
            "type": "string",
82 82
            "format": "datetime"
83 83
          },
84 84
          "generator": {
85 85
            "ref": "#generator",
86 86
            "type": "ref",
87 87
            "description": "The client/agent that created this record"
88 88
          },
89 89
          "modifiedAt": {
90 90
            "type": "string",
91 91
            "format": "datetime",
92 92
            "description": "When this record was last modified"
93 93
          },
94 94
          "motivation": {
95 95
            "type": "string",
96 96
            "description": "W3C motivation for the annotation",
97 97
            "knownValues": [
98 98
              "commenting",
99 99
              "highlighting",
100 100
              "bookmarking",
101 101
              "tagging",
102 102
              "describing",
103 103
              "linking",
104 104
              "replying",
105 105
              "editing",
106 106
              "questioning",
107 107
              "assessing"
108 108
            ]
109 109
          }
110 110
        }
111 111
      },
112 112
      "description": "A W3C-compliant web annotation stored on the AT Protocol"
113 113
    },
114 114
    "target": {
115 115
      "type": "object",
116 116
      "required": [
117 117
        "source"
118 118
      ],
119 119
      "properties": {
120 120
        "state": {
121 121
          "ref": "#timeState",
122 122
          "type": "ref",
123 123
          "description": "State of the resource at annotation time"
124 124
        },
125 125
        "title": {
126 126
          "type": "string",
127 127
          "maxLength": 500,
128 128
          "description": "Page title at time of annotation"
129 129
        },
130 130
        "source": {
131 131
          "type": "string",
132 132
          "format": "uri",
133 133
          "description": "The URL being annotated"
134 134
        },
135 135
        "selector": {
136 -
          "refs": [
137 -
            "#textQuoteSelector",
138 -
            "#textPositionSelector",
139 -
            "#cssSelector",
140 -
            "#xpathSelector",
141 -
            "#fragmentSelector",
142 -
            "#rangeSelector"
143 -
          ],
144 -
          "type": "union",
145 -
          "description": "Selector to identify the specific segment"
136 +
          "ref": "#selector",
137 +
          "type": "ref",
138 +
          "description": "W3C Selector to identify the annotated segment. Uses W3C 'type' field (not ATProto $type) per the Web Annotation Data Model."
146 139
        },
147 140
        "sourceHash": {
148 141
          "type": "string",
149 142
          "description": "SHA256 hash of normalized URL for indexing"
150 143
        }
151 144
      },
152 145
      "description": "W3C SpecificResource - the target with optional selector"
153 146
    },
154 -
    "generator": {
155 -
      "type": "object",
156 -
      "properties": {
157 -
        "id": {
158 -
          "type": "string",
159 -
          "format": "uri"
160 -
        },
161 -
        "name": {
162 -
          "type": "string"
163 -
        },
164 -
        "homepage": {
165 -
          "type": "string",
166 -
          "format": "uri"
167 -
        }
168 -
      },
169 -
      "description": "The client/agent that created this record"
170 -
    },
171 -
    "timeState": {
172 -
      "type": "object",
173 -
      "properties": {
174 -
        "cached": {
175 -
          "type": "string",
176 -
          "format": "uri",
177 -
          "description": "URL to cached/archived version"
178 -
        },
179 -
        "sourceDate": {
180 -
          "type": "string",
181 -
          "format": "datetime",
182 -
          "description": "When the source was accessed"
183 -
        }
184 -
      },
185 -
      "description": "W3C TimeState - record when content was captured"
186 -
    },
187 -
    "cssSelector": {
147 +
    "selector": {
188 148
      "type": "object",
189 149
      "required": [
190 -
        "type",
191 -
        "value"
150 +
        "type"
192 151
      ],
193 152
      "properties": {
194 -
        "type": {
195 -
          "type": "string",
196 -
          "const": "CssSelector"
153 +
        "end": {
154 +
          "type": "integer",
155 +
          "minimum": 0,
156 +
          "description": "TextPositionSelector: end character offset (exclusive)"
197 157
        },
198 -
        "value": {
199 -
          "type": "string",
200 -
          "maxLength": 2000,
201 -
          "description": "CSS selector string"
202 -
        }
203 -
      },
204 -
      "description": "W3C CssSelector - select DOM elements by CSS selector"
205 -
    },
206 -
    "rangeSelector": {
207 -
      "type": "object",
208 -
      "required": [
209 -
        "type",
210 -
        "startSelector",
211 -
        "endSelector"
212 -
      ],
213 -
      "properties": {
214 158
        "type": {
215 159
          "type": "string",
216 -
          "const": "RangeSelector"
160 +
          "description": "W3C selector type identifier",
161 +
          "knownValues": [
162 +
            "TextQuoteSelector",
163 +
            "TextPositionSelector",
164 +
            "CssSelector",
165 +
            "XPathSelector",
166 +
            "FragmentSelector",
167 +
            "RangeSelector"
168 +
          ]
217 169
        },
218 -
        "endSelector": {
219 -
          "refs": [
220 -
            "#textQuoteSelector",
221 -
            "#textPositionSelector",
222 -
            "#cssSelector",
223 -
            "#xpathSelector"
224 -
          ],
225 -
          "type": "union",
226 -
          "description": "Selector for range end"
170 +
        "exact": {
171 +
          "type": "string",
172 +
          "maxLength": 5000,
173 +
          "description": "TextQuoteSelector: the exact text being selected",
174 +
          "maxGraphemes": 1500
227 175
        },
228 -
        "startSelector": {
229 -
          "refs": [
230 -
            "#textQuoteSelector",
231 -
            "#textPositionSelector",
232 -
            "#cssSelector",
233 -
            "#xpathSelector"
234 -
          ],
235 -
          "type": "union",
236 -
          "description": "Selector for range start"
237 -
        }
238 -
      },
239 -
      "description": "W3C RangeSelector - select range between two selectors"
240 -
    },
241 -
    "xpathSelector": {
242 -
      "type": "object",
243 -
      "required": [
244 -
        "type",
245 -
        "value"
246 -
      ],
247 -
      "properties": {
248 -
        "type": {
249 -
          "type": "string",
250 -
          "const": "XPathSelector"
176 +
        "start": {
177 +
          "type": "integer",
178 +
          "minimum": 0,
179 +
          "description": "TextPositionSelector: start character offset (inclusive)"
251 180
        },
252 181
        "value": {
253 182
          "type": "string",
254 183
          "maxLength": 2000,
255 -
          "description": "XPath expression"
256 -
        }
257 -
      },
258 -
      "description": "W3C XPathSelector - select by XPath expression"
259 -
    },
260 -
    "fragmentSelector": {
261 -
      "type": "object",
262 -
      "required": [
263 -
        "type",
264 -
        "value"
265 -
      ],
266 -
      "properties": {
267 -
        "type": {
184 +
          "description": "CssSelector/XPathSelector/FragmentSelector: the selector expression or fragment value"
185 +
        },
186 +
        "prefix": {
268 187
          "type": "string",
269 -
          "const": "FragmentSelector"
188 +
          "maxLength": 500,
189 +
          "description": "TextQuoteSelector: text immediately before the selection, for disambiguation",
190 +
          "maxGraphemes": 150
270 191
        },
271 -
        "value": {
192 +
        "suffix": {
272 193
          "type": "string",
273 -
          "maxLength": 1000,
274 -
          "description": "Fragment identifier value"
194 +
          "maxLength": 500,
195 +
          "description": "TextQuoteSelector: text immediately after the selection, for disambiguation",
196 +
          "maxGraphemes": 150
275 197
        },
276 198
        "conformsTo": {
277 199
          "type": "string",
278 200
          "format": "uri",
279 -
          "description": "Specification the fragment conforms to"
201 +
          "description": "FragmentSelector: URI of the specification the fragment conforms to"
280 202
        }
281 203
      },
282 -
      "description": "W3C FragmentSelector - select by URI fragment"
204 +
      "description": "W3C Web Annotation Selector. The 'type' field discriminates the selector kind using W3C type names (e.g. TextQuoteSelector). This follows W3C conventions, not ATProto union $type."
283 205
    },
284 -
    "textQuoteSelector": {
206 +
    "generator": {
285 207
      "type": "object",
286 -
      "required": [
287 -
        "type",
288 -
        "exact"
289 -
      ],
290 208
      "properties": {
291 -
        "type": {
292 -
          "type": "string",
293 -
          "const": "TextQuoteSelector"
294 -
        },
295 -
        "exact": {
209 +
        "id": {
296 210
          "type": "string",
297 -
          "maxLength": 5000,
298 -
          "description": "The exact text to match",
299 -
          "maxGraphemes": 1500
211 +
          "format": "uri"
300 212
        },
301 -
        "prefix": {
302 -
          "type": "string",
303 -
          "maxLength": 500,
304 -
          "description": "Text immediately before the selection",
305 -
          "maxGraphemes": 150
213 +
        "name": {
214 +
          "type": "string"
306 215
        },
307 -
        "suffix": {
216 +
        "homepage": {
308 217
          "type": "string",
309 -
          "maxLength": 500,
310 -
          "description": "Text immediately after the selection",
311 -
          "maxGraphemes": 150
218 +
          "format": "uri"
312 219
        }
313 220
      },
314 -
      "description": "W3C TextQuoteSelector - select text by quoting it with context"
221 +
      "description": "The client/agent that created this record"
315 222
    },
316 -
    "textPositionSelector": {
223 +
    "timeState": {
317 224
      "type": "object",
318 -
      "required": [
319 -
        "type",
320 -
        "start",
321 -
        "end"
322 -
      ],
323 225
      "properties": {
324 -
        "end": {
325 -
          "type": "integer",
326 -
          "minimum": 0,
327 -
          "description": "Ending character position (exclusive)"
328 -
        },
329 -
        "type": {
226 +
        "cached": {
330 227
          "type": "string",
331 -
          "const": "TextPositionSelector"
228 +
          "format": "uri",
229 +
          "description": "URL to cached/archived version"
332 230
        },
333 -
        "start": {
334 -
          "type": "integer",
335 -
          "minimum": 0,
336 -
          "description": "Starting character position (0-indexed, inclusive)"
231 +
        "sourceDate": {
232 +
          "type": "string",
233 +
          "format": "datetime",
234 +
          "description": "When the source was accessed"
337 235
        }
338 236
      },
339 -
      "description": "W3C TextPositionSelector - select by character offsets"
237 +
      "description": "W3C TimeState - record when content was captured"
340 238
    }
341 239
  },
342 240
  "$type": "com.atproto.lexicon.schema",
343 241
  "lexicon": 1,
344 -
  "revision": 2,
242 +
  "revision": 3,
345 243
  "description": "W3C Web Annotation Data Model compliant unified note record for ATProto"
346 244
}

Compare Other Versions

Lexicon Garden

@