Skip to content

v1.7.0 — typographic control and the canonical capability surface

Choose a tag to compare

@VidGuiCode VidGuiCode released this 12 Sep 03:54
· 10 commits to main since this release

v1.7.0 — typographic control and the canonical capability surface

Bold headlines, tracked captions, outlined display text, and text that sits
where the box says it should — plus one capability listing that every
surface reads, so what the engine renders is exactly what it advertises.

schemaVersion stays 1 and the Operation union is unchanged. The
oldest build that opens a 1.7.0 document is 1.0: builds 1.0 through 1.6
degrade silently through the Extras capture map, rendering the regular
face with no spacing, stroke or vertical alignment.

Added

  • fontWeight (100–900) and fontStyle on text layers, resolved by
    exact face: a weight the font store has no face for is refused with a
    typed MissingFont naming family, weight and style — never substituted.
    Set them through assemblash set/add-text (--weight, --font-style),
    MCP add_text_layer/update_layer, the HTTP create/update payloads,
    presets, and the interface.
  • letterSpacing (px) on text layers, part of measurement itself —
    wrapping, /text-layout, the overflow warnings and the export all agree.
  • stroke on text layers, painted centred on the glyph outline with
    paint-order="stroke". A layer with color: null and a stroke is hollow
    display text.
  • verticalAlign (top | middle | bottom, default top), so
    existing documents render pixel-identically.
  • The canonical capability listing. assemblash styles --json, HTTP
    GET /api/capabilities, and the new MCP list_capabilities tool serve
    one identical listing of every blend mode and effect this build renders,
    with examples and notes. Check it before building.
  • Four new cross-target determinism gates for the new paint paths
    (text-weight, text-stroke, text-spacing, text-valign); every
    pre-existing golden is byte-identical.

Upgrade: 1.7.0 is a drop-in replacement for 1.6.x. Documents written by
1.7.0 open unchanged in 1.6.1 and in every build back to 1.0 (new fields are
preserved, just not rendered, by older builds).