{
  "busVersion": "0.3",
  "title": "bus-vector-1 — the neutral vector figure profile",
  "status": "PROVISIONAL",
  "mediaType": "image/svg+xml",
  "basis": "SVG 1.1 Second Edition, Static processing mode",
  "rationale": "Clause 13.4.3 named bus-vector-1 in v0.2 and never defined it, which made figure mode normative and unimplementable: a package using figure mode was portable only between implementations that had privately agreed what the format was, which meant none. Clause 19.3 separately required that a receiver not execute script, resolve external references or fetch remote content in a figure, which is a security requirement with no format to attach it to. Neither Project Haystack nor Brick has any vector, drawing, symbol or figure construct, so there was nothing to adopt. Defining a new vector format was rejected: there is no second implementer to share the cost and no tooling. bus-vector-1 is therefore a closed profile of a format every receiver already has a parser for, constrained until the security requirement is satisfied by construction rather than by vigilance.",
  "aliases": {
    "svg-profile-1": "The v0.2 token svg-profile-1 named the same undefined thing. Two names for one undefined format was worse than one. A receiver MUST accept svg-profile-1 as an alias for bus-vector-1 for one MINOR version; an exporter MUST NOT write it."
  },
  "permittedElements": [
    "svg", "g", "defs", "title", "desc", "use",
    "path", "rect", "circle", "ellipse", "line", "polyline", "polygon",
    "text", "tspan"
  ],
  "forbiddenElements": [
    { "element": "script", "reason": "19.3 — a figure MUST NOT execute." },
    { "element": "foreignObject", "reason": "19.3 — escapes the profile entirely." },
    { "element": "image", "reason": "Raster content is not vector geometry and is usually an external reference." },
    { "element": "a", "reason": "Navigation is the receiver's, not the figure's." },
    { "element": "style", "reason": "A receiver must be able to strip appearance and keep shape without parsing a stylesheet." },
    { "element": "switch", "reason": "Conditional rendering makes 'render substantially as given' untestable." },
    { "element": "filter", "reason": "Appearance, and expensive; 13.9 puts appearance on the vendor's side." },
    { "element": "animate", "reason": "A figure is a drawing, not a behavior." },
    { "element": "animateTransform", "reason": "As animate." },
    { "element": "animateMotion", "reason": "As animate." },
    { "element": "set", "reason": "As animate." },
    { "element": "marker", "reason": "Renders differently across parsers; use explicit geometry." },
    { "element": "pattern", "reason": "Appearance, and a common vehicle for external references." },
    { "element": "mask", "reason": "Appearance; changes geometry a receiver reads." },
    { "element": "clipPath", "reason": "Appearance; hides geometry that is nonetheless present." },
    { "element": "symbol", "reason": "Overlaps bus:SymbolRole in name and in function, and confuses the two mechanisms." }
  ],
  "constraints": [
    { "id": "VEC-1", "grade": "MUST", "text": "The root element is svg and carries a viewBox. It MUST NOT carry width or height in absolute units: a figure composes with the drawing's coordinate system (13.3) and does not assert a physical size of its own." },
    { "id": "VEC-2", "grade": "MUST", "text": "Every element is drawn from the permitted list. Any other element, in any namespace, makes the figure invalid." },
    { "id": "VEC-3", "grade": "MUST", "text": "No attribute contains an href, xlink:href or url() reference to anything other than a fragment within the same figure. No external entity, no DOCTYPE, no @import." },
    { "id": "VEC-4", "grade": "MUST", "text": "Appearance is carried by presentation attributes only. No style attribute, no style element, no CSS of any kind." },
    { "id": "VEC-5", "grade": "MUST", "text": "Element nesting MUST NOT exceed 16 levels and a figure MUST NOT contain more than 4096 elements. This gives 19.3's requirement that a receiver bound the size of an inline figure payload a number to bound against." },
    { "id": "VEC-6", "grade": "SHOULD", "text": "Text carries font-family and font-size where they matter to legibility. A receiver MAY substitute any font: fonts are the vendor's under 13.9." },
    { "id": "VEC-7", "grade": "MUST", "text": "The document is well-formed XML in UTF-8, with no processing instructions other than the XML declaration." }
  ],
  "renderingObligation": {
    "requirement": "13.4.3 — a receiver MUST render a figure substantially as given.",
    "substantially": "Geometry is preserved within the RT-18 tolerance of one part in ten thousand of the drawing extent, and topology — element count and nesting — is preserved. Colors, strokes, fills, line weights and fonts are NOT guaranteed and a receiver MAY replace them wholesale.",
    "reasoning": "13.9 puts appearance on the vendor's side of the boundary and 13.4.3 requires faithful rendering; read loosely those two contradict. A figure is portable shape, not portable artwork. Saying so is what lets both clauses stand."
  },
  "conformance": {
    "PK-22": "A figure's source parses as XML, declares a viewBox, and contains no forbidden element and no external reference.",
    "IM-11": "An importer refuses a figure containing a forbidden element or an external reference, rather than sanitizing it silently.",
    "RT-20": "A figure survives a round trip with geometry and topology intact, per renderingObligation."
  }
}
