{
  "generatedAt": "2026-11-03T06:33:46.080Z",
  "commit": "d4a36768c35c26e0c65585d24f5aa86f2d699b06",
  "source": {
    "roadmap": "docs/ROADMAP.md",
    "github": "mark1russell7/typeset"
  },
  "items": [
    {
      "id": "T1",
      "title": "Font tables: read the glyph advances and the kerning pairs from a font file (TrueType, OpenType, WOFF2); a font epoch; a bench against canvas `measureText` on a corpus of fonts",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 7,
      "links": []
    },
    {
      "id": "T1b",
      "title": "Variable fonts (`fvar`, `avar`, `HVAR`) at the weight of the CSS; a rounding mode to whole px; the comparison on Linux at the device scale 2, on macOS and on Windows, with a bound for each platform",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 8,
      "links": []
    },
    {
      "id": "T1c",
      "title": "The errors that remain after T1b. The GSUB pass (typeset#25), the instance advances (typeset#27), the table of engine rules (typeset#29) and the words of a canvas (typeset#31) close them. Each script except Arabic and Devanagari is now at most 0.0014 px on each platform",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 9,
      "links": []
    },
    {
      "id": "T1d",
      "title": "Arabic joining forms and an Indic shaper in the model, so that the widths of Arabic and Devanagari text are correct. Arabic is done: 240 of 240 lines within 0.01 px on the four arms (typeset#34). On macOS and Windows, the sum `float32` of the canvas gives the paragraphs and the pages within 0.01 px. The Indic shaper for Devanagari is next",
      "status": "in progress",
      "statusClass": "progress",
      "section": "Roadmap",
      "line": 10,
      "links": []
    },
    {
      "id": "T2",
      "title": "The `Text` rope: the width monoid, concatenation, slice and edit with summary updates; property tests (the rope width is equal to the width of the flat string)",
      "status": "later",
      "statusClass": "later",
      "section": "Roadmap",
      "line": 11,
      "links": []
    },
    {
      "id": "T3",
      "title": "Line breakers as strategies: greedy, Knuth-Plass total fit and balanced, with the measures line count, raggedness and time, on the corpus and in the CI bench. `@mark1russell7/typeset` 0.1.0 has them in the subpath `./breaking`, see [BREAKING.md](BREAKING.md). `layoutText` of `@mark1russell7/layout-contract` 0.3.2 uses them, with the same output as 0.2.21 and the option `breaker` (layout-contract#148). The rope (T2) makes it incremental",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 12,
      "links": []
    },
    {
      "id": "T4",
      "title": "Error bounds: the error of the fast path against a shaper (HarfBuzz) for each script and font, in 1/64 px; size scaling and hinting per font",
      "status": "later",
      "statusClass": "later",
      "section": "Roadmap",
      "line": 13,
      "links": []
    },
    {
      "id": "T5",
      "title": "The bound fast path: width at most length × maximum advance of a declared character set, plus a margin per character",
      "status": "later",
      "statusClass": "later",
      "section": "Roadmap",
      "line": 14,
      "links": []
    },
    {
      "id": "T6",
      "title": "Shaper fallback for complex scripts, ligatures, bidi and emoji",
      "status": "later",
      "statusClass": "later",
      "section": "Roadmap",
      "line": 15,
      "links": []
    },
    {
      "id": "T7",
      "title": "A text corpus generator (scripts, lengths, fonts, edit sequences) and the CI bench",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 16,
      "links": []
    },
    {
      "id": "T8",
      "title": "An adapter for the `/text` measurer interface of `@mark1russell7/layout-contract`",
      "status": "later",
      "statusClass": "later",
      "section": "Roadmap",
      "line": 17,
      "links": []
    },
    {
      "id": "T9",
      "title": "Use the rigor homes: `rigor-generators` for the random numbers of the corpus, `rigor-statistics` for the statistics of the bench",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 18,
      "links": []
    },
    {
      "id": "S1",
      "title": "The site on GitHub Pages: the font tables against canvas `measureText` in the browser, a sweep of the corpus, and the grid of a CI fonts run (typeset#35, typeset#37)",
      "status": "done",
      "statusClass": "done",
      "section": "Roadmap",
      "line": 19,
      "links": []
    }
  ],
  "pullRequests": [
    {
      "number": 5,
      "title": "chore(deps): update pnpm to v12.16.1",
      "url": "https://github.com/mark1russell7/typeset/pull/5",
      "author": "renovate",
      "branch": "renovate/pnpm-12.x",
      "draft": false,
      "createdAt": "2026-11-02T05:01:57Z",
      "updatedAt": "2026-11-03T02:00:11Z",
      "labels": [
        "dependencies"
      ],
      "checks": "failure"
    }
  ],
  "issues": [
    {
      "number": 1,
      "title": "Dependency Dashboard",
      "url": "https://github.com/mark1russell7/typeset/issues/1",
      "author": "renovate",
      "createdAt": "2026-10-29T15:22:51Z",
      "updatedAt": "2026-11-03T05:55:31Z",
      "labels": []
    }
  ],
  "github": {
    "available": true,
    "totals": {
      "pullRequests": 1,
      "issues": 1
    }
  }
}
