Repository navigation
FlashTeX v0.2.0 is the first release with the new engine: a port of pdfTeX
to Rust that typesets as pdflatex does. It covers the changes since v0.1.9
(2026-09-26), about 560 merged pull requests.
The new engine
- FlashTeX now ships a pdfTeX-compatible engine. It is translated from
Knuth'stex.webandpdftex.webwith TeX Live's change files, and it
passes Knuth's trip test and e-TeX's etrip test. - pdfTeX's font, image and PDF code is ported too: Type 1, Type 3/PK,
TrueType and OpenType fonts, PNG/JPEG/PDF images, and SyncTeX. - Each night it is checked against pdflatex, over fixtures, arXiv papers,
templates, TeX Live package documents and a corpus of about 5,000
documents. Infinite Descent, a 592-page book, comes out the same as
pdflatex's. - The nightly check now downloads every arXiv paper first,
retries and checks it, and reports a failed download as a failure. Before,
a paper that failed to download was left out without notice. bibtexandmakeindexare now built in (Rust ports). They run inside the
engine and from\write18, with no TeX Live install.\write18is restricted by default, as in TeX Live.
Instant preview
- One engine process stays running for each open document. After an edit it
starts again from a saved point close to the edited page, not from the
start of the document. Preamble edits also restart part-way through. - Reopening a document is faster: the last state is saved on disk, so a
reopen often needs one pass, not two or three. - Tested for typing at up to 200 words per minute, with a latency target for
the edited page. - Editing
\titleand other preamble lines that LaTeX only uses at
\begin{document}no longer restarts the document from the start. - Each keystroke costs less: the preview's drawing step reads pages about four
times faster, and the check for whether a rerun has caught up is about a
fifth cheaper. Output is unchanged. - A file that is rewritten in place with its old size and date put back (for
example bycp -porrsync -t --inplace) is now seen as changed. Saved
states from earlier builds are discarded once and rebuilt.
Mac app
- Engine choice. You can turn on the new engine for one document (the
status bar's engine menu, or View > Engine for This Document) or for all
documents (Settings > Compile). New documents still use the previous
engine by default. If the new engine cannot typeset a project the way the
previous engine does, the app uses the previous engine and tells you. - New-engine preview. Zoom with sharp tiles, forward and reverse search,
clickable hyperref links, the page under the caret marked, page labels,
dark preview, VoiceOver page text and a Pages rotor. Export PDF and Print,
bibliographies, indexes and package fetching all work with it. - Unicode mode. Documents that need
fontspecorunicode-mathrun in a
XeLaTeX-compatible engine (flashtex-host-unicode), chosen per document.
Unicode mode also works with no TeX Live installed, and finds the bundle's
fonts by the same family names as xelatex. - Faster Unicode mode. Unicode mode now restarts after an edit from the
page before it, or from\begin{document}after a body edit, instead of
typesetting the whole document again. Reopening a document uses its saved
state. Start-up is about 44% shorter and each keystroke does about two
thirds less work. This also holds for right-to-left documents set with
polyglossia. - Right-to-left and other scripts in Unicode mode. Hebrew and Arabic words
are laid out right to left, as xelatex does, and line breaking for
\XeTeXlinebreaklocale(Thai, Japanese and similar) follows xelatex. The
polyglossia manual, which used to stop with an internal error, now
typesets as xelatex's. - Unicode-mode PDFs. Beamer's links and soft masks are written, and
copied text maps back to the right characters as xdvipdfmx's does. - Performance modes. Settings > Performance: Low Memory, Balanced or
High Performance. You can switch while a document is open. - Editor. The project sidebar shows a folder tree. You can paste or drop
an image to make a figure, choose editor themes, and use hybrid conceal
(\alphashows as α until the caret reaches it). The TeXpand abbreviation
engine is in too, off by default. You can preview a single\include
chapter (LaTeX's\includeonly). Settings has a delay for dimming stale
pages. New windows open on a blank article. - Live Share (preview, off by default) lets people edit together, with
presence, invites and approval. - Preview fixes. Page labels and zoom tiles no longer appear upside
down for a moment while a page is redrawn. - Speed and memory. Typing no longer waits on work over the whole
document. Leaks are fixed, including one in the preview that kept every
page image (up to 9.6 GB). Memory use on large documents is much lower,
and the app trims its caches under memory pressure.
Command line
flashtex-v3runsbuild,checkandwatchon the new engine and shows
progress on a terminal.--mode,% !TEX programand a[project]
setting choose the engine.- The CLI tarball ships
flashtex-v3with its engine host,flashtex-host. - Package downloads use rustls 0.23.45, which fixes a TLS handshake flaw
(GHSA-2mjx-qc3c-rqvc). - The README has benchmarks of the new engine against pdflatex, xelatex and
latexmk.
No TeX Live needed
- A TeX Live 2026 bundle is published as release assets
(texbundle-tl2026-*). The new engine compiles from it with no TeX Live
installed, including bibliography and index styles. - The bundle now also has the packages and fonts the Unicode test documents
need, an index of font names, and TeX Live'sglyphlist, so text copied
from a PDF built without TeX Live maps back to the right characters.
Previous engine
- The previous engine is frozen and gets fixes only. Fixes in this release:
TikZ and pgfplots plots, amsmathaligned, amsthm spacing,\sqrt[n],
\binom, siunitx, fancyhdr, minipage, multicolumn, and side-by-side
authors.
Licences and source
flashtex-host and flashtex-host-unicode are separate programs under the
GNU General Public License, version 2 or later. Their complete source is the
v0.2.0 tag of https://github.com/flash-tex/flashtex (crates/flashtex-engine,
crates/flashtex-xetex, tools/web2rust), and GitHub's source archives of
that tag are listed with this release. The licence texts and third-party
notices ship in the app and in share/flashtex/engine/ in the CLI tarball.
The rest of FlashTeX is under the MIT licence (LICENSE).
Downloads
| Asset | What |
|---|---|
FlashTeX.dmg / FlashTeX-0.2.0-macos-arm64.dmg |
The Mac app (macOS 14+, Apple Silicon). Same file under both names; install.sh on the website fetches FlashTeX.dmg. |
flashtex-cli-0.2.0-macos-arm64.tar.gz |
The flashtex CLI (flashtex build main.tex, check, watch, supported, worker, fonts) plus flashtex-render/compiler/pdf helpers, with the bundled fonts/metrics; and flashtex-v3 (build, check, watch on the pdfLaTeX-compatible engine; needs TeX Live) with its engine host flashtex-host (GPL-2.0-or-later). |
flashtex-cli-0.2.0-linux-x86_64.tar.gz |
Command-line tools for Linux x86_64 (built: flashtex-cli render-pipeline compiler pdf flashtex-build flashtex-engine). |
SHA256SUMS |
sha256sum -c SHA256SUMS after downloading. |
Signing
This build is ad-hoc signed (no Developer ID certificate configured in CI). macOS Gatekeeper will refuse the first launch from a browser download: right-click FlashTeX.app > Open, or install with the website's install.sh which strips the quarantine attribute after verifying the checksum.
FlashTeX.dmg sha256: 8b6e35452fbb4eb9cc5f6d638309c82882e60a7cd9d81d915bbfab52d123d3dd
Source
Source code for the FlashTeX engine (GPL-2.0-or-later): https://github.com/flash-tex/flashtex (this release: https://github.com/flash-tex/flashtex/tree/v0.2.0)
What's Changed
- tex-expansion: parse bare numeric relations and infix AND/OR/NOT in ifthenelse tests by @d-q222 in #1093
- render-pipeline: warn about float graphics only when the box drops them by @d-q222 in #1054
- package-resolver: verify TLS with the platform store; retry CTAN mirrors with a fixed fallback (#1116) by @d-q222 in #1117
- tex-expansion: carry whole \begin{name} invocation as origin, keep bare span by @d-q222 in #1094
- tikz: honour align for multiline node text by @d-q222 in #1033
- mac: fix Fetch Missing Packages dialog UI bugs (#1116) by @d-q222 in #1118
- ci: fetch glyphlist.txt from Adobe's pinned commit, CTAN as digest-checked fallback (#1101) by @d-q222 in #1125
- compiler: siunitx raw_text keys control-symbol identity on the lexer mark, not span width (#760) by @d-q222 in #1092
- vector-graphics: regression tests for the three TikZ arc spellings by @d-q222 in #1032
- apps/mac: verify and harden click-to-jump from PDF preview to source by @d-q222 in #1100
- render-pipeline: a theorem or proof opened from a \newenvironment body is that environment (#1126) by @d-q222 in #1130
- project-files: canonicalize case-only reference collisions by @d-q222 in #1049
- perf-bench: fail the run when baseline cases go unmeasured unless --allow-unmeasured by @d-q222 in #996
- compiler tests: acceptance form for itshape/bfseries in math mbox (#1005 item 4) by @d-q222 in #1099
- vector-graphics: regression tests for basic tikz foreach forms by @d-q222 in #1047
- compiler math: apply TFM italic correction for / in math text groups by @d-q222 in #1090
- compiler: parse plain-TeX \root \of as a sqrt radical by @d-q222 in #1144
- render-pipeline: amsthm remark style takes half \topsep and an italic correction before its number by @d-q222 in #1143
- mac tests: disable hosted-window animation; waitUntil throws on timeout (#1114) by @d-q222 in #1138
- compiler tests: paragraph-layout conformance harness for #27 (slice 1, measurement only) by @d-q222 in #1098
- render-pipeline: blank honoured \setlength{\multicolsep} so the compiler stops warning it is not implemented by @d-q222 in #1022
- mac: New Project template picker gets a per-option VoiceOver label by @d-q222 in #1119
- compiler: build \doteq and \models as the kernel does, not as single glyphs by @d-q222 in #1081
- compiler+render-pipeline: multiple \and-separated authors already render in side-by-side columns by @d-q222 in #976
- render-pipeline: amsmath
aligned/alignedatpair gaps and the trailing\alignsep@(#955) by @d-q222 in #1134 - tikz: path-level plot keys, pgffor sampling, smooth/cycle handlers, -- plot (supersedes #1037) by @d-q222 in #1132
- tikz: plot coordinates and plot[domain,samples] as polylines by @d-q222 in #1037
- docs: regenerate Supported LaTeX counts after #1144 + #1081 (fixes main red) by @d-q222 in #1156
- vector-graphics: regression tests for TikZ stroke/fill style keys by @d-q222 in #1048
- render-pipeline: renderer halves for \sqrt[n], \choose and quotation indent (no re-pin) by @d-q222 in #1135
- fix(compiler): keep both interword glues around a command that sets nothing (#1124) by @d-q222 in #1139
- apps/mac: Thesis, Lecture notes, and Beamer presentation templates by @d-q222 in #1084
- math-layout: script-style \binom/\choose/\atopwithdelims delimiters from the text-size small variant (tex.web §707) by @d-q222 in #1149
- compiler: bound compile_result to the consumer's frame, not a fixed 8 MiB (#33) by @d-q222 in #1129
- fix(vector-graphics): pgfplots axis defaults, samples and markers (supersedes #1106) by @d-q222 in #1161
- tikz: minimal pgfplots axis with one sampled addplot expression by @d-q222 in #1106
- test: skip rendering-v2 tests without jsonschema so tests/ pass on Python 3.9 (#47) by @d-q222 in #1167
- render-pipeline: re-pin vendor/vector-graphics to 7c41493 (14 tikz commits reach users) by @d-q222 in #1155
- fix(compiler): decide control-symbol identity in one helper, never by span width (#760) by @d-q222 in #1060
- engine-v2 P0: tiered CI, gate.sh, licence-boundary check, self-hosted runner prep by @GoKubar in #1186
- engine-v2 P0: web2rust translates tex.web; flashtex-engine passes trip by @GoKubar in #1185
- engine-v2 P0: snapshot-mechanism benchmark (§5.2) — flat arena + chained undo log by @GoKubar in #1187
- tools/parity: DESIGN §1.1 gating tiers P-T1/P-T2 as the headline, --engine switch (P0-PARITY-TIERS) by @d-q222 in #1188
- compiler: fix debug-profile stack overflow in deeply_nested_input_does_not_blow_the_stack by @GoKubar in #1190
- gate.sh: resolve the worktree's own root in nested worktrees by @GoKubar in #1192
- P1-TEX82-CORE: trip in CI, drift check, kpathsea resolver, TeX Live capacities by @GoKubar in #1189
- spellcheck: deterministic bound instead of a wall-clock limit in adversarial tests by @GoKubar in #1195
- P2-PDFTEX-CORE: pdftex.web via web2rust + change files; etrip passes; latex.ltx builds by @GoKubar in #1194
- tools/snapshot-bench: rustfmt by @GoKubar in #1193
- engine P3-FONTS: pdfTeX's font backend ported, TeX Live's zlib; P-T2 on fixtures by @GoKubar in #1197
- design: record linked upstream libraries and xpdf's GPL v2-or-v3 licence by @GoKubar in #1203
- gate.sh quick: bound the root-manifest case; workspace tests stay in the merge queue by @GoKubar in #1199
- ci: merge-queue check timeout 60 -> 240 min by @GoKubar in #1205
- tools/lockstep: pdfTeX lockstep harness, capture() and 260 primitive cases (P0-LOCKSTEP-HARNESS) by @d-q222 in #1191
- tools/parity: P-T1 normalises only end-of-run accounting (DESIGN §1.1 N2) by @d-q222 in #1196
- tools/latex-suites: l3build runner for the latex2e/latex3 suites (P0-LATEX-SUITES) by @d-q222 in #1204
- ci: stop duplicate macOS runs; self-hosted Macs take only queued code by @GoKubar in #1206
- ci: macOS matrix legs use the self-hosted Mac when enabled by @GoKubar in #1212
- ci: Xcode jobs stay on hosted macos-26; Rust legs use self-hosted Macs by @GoKubar in #1222
- engine P3-IMAGES: image and PDF inclusion (libpng, xpdf linked); P-T2 82/82 by @GoKubar in #1202
- ci: runner installs to a space-free path by @GoKubar in #1214
- design §4.5: \write18 restricted by default (owner decision) by @GoKubar in #1209
- Retire vendor/ and land #1122 (engine-v2 P0) by @GoKubar in #1183
- ci: NixOS PC runs Linux legs; per-instance runner toolchains; tests find python3 on PATH by @GoKubar in #1225
- compiler, render-pipeline: fancyhdr at shipout, \ruled, \pdfbookmark, mathtools (21-242 proof practice, slice A) by @jay3332 in #1122
- engine: P-T1 on the parity fixtures (web2c run setup, \pdfmatch, \write18) + pdfTeX regression tests (T0) by @GoKubar in #1198
- P3-DISTRIBUTION: format cache (fmtutil-exact, read-set keyed), TeX Live discovery, TTBv1 bundle fallback by @GoKubar in #1216
- iPad CI: fix flaky test(s) by @GoKubar in #1226
- design: P0–P2 exit gates met; drop stale pdfimage xfail by @GoKubar in #1229
- engine P3-DISPLAYLIST: display-list-v3 (spec, writer exact to pdflatex's PDF, engine host socket, MIT client) by @GoKubar in #1217
- tools/lockstep: harden against false passes (PDF/DVI integrity, byte-exact logs, process groups); restricted shell-escape default by @d-q222 in #1210
- tools/parity: shell escape defaults to no flag, each engine's default mode (owner #1209) by @d-q222 in #1211
- design §5.6: intrinsics refinement; pipeline/export parallelism by @GoKubar in #1231
- One flashtex-host: the display-list-v3 socket drives the resident incremental engine (P3P4-HOST-UNIFY; supersedes #1215, #1223) by @GoKubar in #1235
- P4-L5-RESTART: .aux read-sets, passes, restart points between pages, barriers, preemption (draft) by @GoKubar in #1242
- compiler, render-pipeline: minipage boxes and stretchable vertical glue (21-242 proof practice, slice B) by @jay3332 in #1121
- design §15: Typst support (owner decision) by @GoKubar in #1243
- tools/fuzz/seeds: 40 primitive-level fuzzer seeds by @d-q222 in #1240
- tools/latex-suites: hash-scoped expected failures, --engine-env, DVI-mode (etex shim), derivation by @d-q222 in #1213
- fix(render-pipeline): no panic on multibyte chars at multicols/float boundaries by @d-q222 in #1227
- ci: gate the new engine's parity (lockstep, P-T1/P-T2); T2 + soundness nightly; macOS legs post-merge by @GoKubar in #1262
- docs: cross-platform evaluation (CROSS-PLATFORM-EVAL) by @GoKubar in #1244
- L6: macro profiler and guarded intrinsics for hyperref's per-page \pdfstringdef (P6-HYPERREF-INTRINSICS) by @GoKubar in #1230
- APP-PERF-AUDIT: Mac app keystroke-to-pixels audit, three measured fixes, signposts by @GoKubar in #1252
- P5-ARXIV-SCOREBOARD: arXiv/templates scoreboard (new 97.9% L1 vs v1 0.7%) + parity harness fixes by @d-q222 in #1224
- tests: robust timeouts for two flaky queue tests by @GoKubar in #1260
- lockstep: hide the per-engine bin-dir hash in normalised logs by @d-q222 in #1239
- P3-FONTS-2: PK/Type 3, TrueType, OpenType and subfont fonts ported; display list; family census by @GoKubar in #1265
- tools/lockstep: corpus 260 -> 837 cases (T1 breadth) by @d-q222 in #1233
- xplat: display-list endpoint grammar, one cache resolver, poppler/MuPDF licence deny (XPLAT-RULES) by @GoKubar in #1246
- displaylist: tokenize a Type 1 built-in /Encoding as PostScript does by @GoKubar in #1249
- ci: every Linux job on the NixOS PC (three runners); engine binaries run on NixOS by @GoKubar in #1232
- P3-APP-V3: engine-v3 preview in the Mac app behind a flag by @GoKubar in #1247
- L6: font-state fix, PGO dist build, benchmark-only unchecked reads (plain-1000 1.35 s to 1.02 s; pdflatex 1.08 s) by @GoKubar in #1241
- tools/fuzz: T6 differential and parser fuzzers, nightly driver by @d-q222 in #1234
- tools/package-smoke: 57 package smoke documents and a runner by @d-q222 in #1238
- P3-APP-V3 follow-up: open/retarget fix, v3 chrome + Problems, run script, bundled host, lifecycle, off-main commits by @GoKubar in #1254
- tools/lockstep: land 8 reviewed lockstep PRs in one queue run (#1248 #1251 #1253 #1256 #1261 #1268 #1258 #1263) by @d-q222 in #1278
- tools/lockstep: 100 new cases (tex.web parts 24-49), each naming its section by @d-q222 in #1248
- tools/lockstep: 60 new cases, wave 2 (alignment, math, inserts/marks/output routine) by @d-q222 in #1251
- tools/lockstep: 60 new cases, wave 3 (e-TeX, characters and glue, pdfTeX primitives) by @d-q222 in #1253
- tools/lockstep: 60 new cases, wave 4 (tokens, boxes and lists, fonts and output) by @d-q222 in #1256
- tools/lockstep: near-duplicate checker for new cases by @d-q222 in #1258
- lockstep corpus 6: 36 cases (macros, math lists, line breaking, page builder) by @d-q222 in #1261
- lockstep: coverage map generator and COVERAGE.md by @d-q222 in #1263
- lockstep corpus 7: 19 cases for uncovered primitives (tracing, text, PDF) by @d-q222 in #1268
- fuzz seeds wave 2: 23 seeds for under-covered primitives, README recipe fix by @d-q222 in #1277
- package-smoke: 412 documents (waves 2 and 3), stricter PDF compare, unreadable-PDF handling by @d-q222 in #1291
- lockstep: regenerate COVERAGE.md from main (1145 cases) by @d-q222 in #1292
- P3-APP-V3: forward/reverse search (SyncTeX-grade), follow-the-edit, dark preview (engine-v3 pane) by @GoKubar in #1259
- P5-EXTERNAL-TOOLS: bibtex, biber, makeindex in the engine host as latexmk runs them (protocol 3.2) by @GoKubar in #1296
- ci: run the old engine's parity fixtures in the queue only when a change touches them by @GoKubar in #1298
- editor: \begin/\end name sync — fix intermittent failures by @jay3332 in #1267
- editor: TeXpand abbreviation engine — M0–M2 (parser, registry, expander; off by default) by @jay3332 in #1270
- editor: code themes, chrome colours and display settings (EDITOR-THEMES) by @jay3332 in #1271
- fuzz: shell_escape=f, random-seed and flood fixes, kill-race re-freeze (follow-up to #1234) by @d-q222 in #1290
- lockstep cases: drop three near-duplicates, correct two notes, add 1242 unmatched \pdfrestore by @d-q222 in #1293
- lockstep: 60 cases (1440-1499) for primitives no case used; uncovered 117 -> 52 by @d-q222 in #1301
- flashtex-engine: writet1 cs_mark on its own stack; errors only where pdfTeX never finishes (#1237) by @d-q222 in #1281
- P4-MULTIPASS step 1: tools before the .aux passes; two L5 proof fixes (stacked on #1296) by @d-q222 in #1308
- engine: \font never reuses an expandable font (pdftex.ch; #1220) by @d-q222 in #1280
- ci: light Linux jobs on ubuntu-latest always; the NixOS PC keeps the heavy ones by @GoKubar in #1318
- ipad: full-screen canvas and double-tap undo by @jay3332 in #1273
- mac: paste an image as a figure (PASTE-IMAGE-FIGURE) by @jay3332 in #1305
- editor: hybrid conceal — \alpha as α, \textbf{} folded until the caret reaches it (HYBRID-CONCEAL) by @jay3332 in #1272
- D4 TYPST-T0: flashtex-typst-host (own workspace, display-list-v3 + 3.2 draft, typst =0.15.1) by @d-q222 in #1303
- P4-FINISH: host keystroke path, convergence on hyperref documents, the owner's book, tools/incr-bench by @GoKubar in #1269
- P3-APP-V3: Type 3 / TrueType / OpenType fonts in the engine-v3 pane by @GoKubar in #1266
- editor: TeXpand M3 — live capture in the Mac editor (off by default) by @jay3332 in #1274
- mac: preview font smoothing setting (default off, exact parity) by @jay3332 in #1304
- flashtex-engine: TeX Live's hash layout (tex.ch hash_size 15000, hash_prime 8501, hash_extra) by @d-q222 in #1285
- ci(nixos runner): combined 20 GB memory cap (flashtex.slice) for runners and agent runs by @GoKubar in #1327
- design review 2026-09-30: findings, corrections, owner decisions by @GoKubar in #1264
- tools/parity: P5 scoreboard, new engine vs v1 on every tier, nightly on NixOS (D3 P5-SCOREBOARD) by @d-q222 in #1299
- fixtures/multipass: 20 small multi-pass documents for the soundness harness by @d-q222 in #1306
- soundness sweep: multi-pass fixtures (re-open of #1310, which merged into a stale base) by @d-q222 in #1317
- tools/parity: packages tier (92 TeX Live package docs); new engine 100% P-T1/P-T2/L1, v1 0/92 P-T2 (M1, P5) by @d-q222 in #1288
- P3-APP-V3: instant reopen from stored pages (8A), project trust (9A), key→presented measurement by @GoKubar in #1332
- engine: P6-THROUGHPUT: faster than pdfTeX at 10-1,000 pages; 64-bit divide_scaled, get_next file part out of line by @d-q222 in #1309
- writet3/pkin: §4.5 hardening and parity fixes on top of #1265 (closes #1218) by @d-q222 in #1282
- flashtex-engine: two_halves b0/b1 in texmfmem.h's layout; no panic on a list-head space (#1219) by @d-q222 in #1279
- INCR-FILE-SOUNDNESS: output files exactly restored across restarts (#1294), IMAGE keeps its file (#1295) by @GoKubar in #1313
- typst-host: negotiate the Typst extension as display-list-v3.3 (fixes red main) by @GoKubar in #1335
- tools/parity: streaming constant-memory P-T1 compare; evaluates multi-GB traced logs (removes 4 --pt1-skip) by @d-q222 in #1341
- latex-suites: key T2 failure comparison by (label, test) by @d-q222 in #1338
- P5-DIAGNOSTICS: structured diagnostics side channel (diag-v1): column, trace, help, codes by @GoKubar in #1255
- readset: find shared bodies in the hash_extra region by @d-q222 in #1339
- lockstep: 11 cases (1520-1530) for the page-builder fil/fill/filll totals by @d-q222 in #1311
- lockstep: 34 cases (1720-1759) for insertions, marks, output routines and alignment by @d-q222 in #1322
- package-smoke wave 4: 53 long-tail package documents and the 400-paper sample by @d-q222 in #1307
- tools/parity: seed oracle EPS conversions so Ghostscript dates stop failing P-T (harness-eps-date) by @d-q222 in #1347
- lockstep: 31 cases (1600-1639) for uncited tex.web parts 38-43 and 47-49 by @d-q222 in #1320
- web2rust: name WEB macro constants (996 consts, 7583 sites; identical machine code) (D5) by @d-q222 in #1302
- lockstep: 16 cases (1700-1715) for the page builder and vsplit by @d-q222 in #1324
- fuzz: pin the shared reference-nondeterministic signature in docgen (test only) by @d-q222 in #1316
- lockstep: 29 cases (1640-1692) for uncited tex.web parts 22-27, 17-20/30/32/33/53 and pdftex.web by @d-q222 in #1321
- lockstep: 35 cases (1760-1799) for math lists to hlists and displays by @d-q222 in #1323
- engine tests: a fresh scratch dir per process, never another build's engine (pid-reuse hazard) by @d-q222 in #1326
- lockstep: interword glue and space factor cases 1820-1838 by @d-q222 in #1346
- fixtures/pdf-primitives: 12 PDF-only primitive documents with with/without qpdf checks by @d-q222 in #1312
- host/crash: libc-exact write/open declarations (fixes the build on Rust 1.99) by @d-q222 in #1355
- parity: stream the v1 display list (no 17 GB load); normalise TEXMFVAR in P-T1 logs by @d-q222 in #1351
- latex-suites: --list enumerates what a run executes (1,590, not 1,017) by @d-q222 in #1353
- engine: TeX Live's SyncTeX node layout (changes/synctex.ch) by @d-q222 in #1356
- engine: drop tex.web's ?.? glue-ratio test, as TeX Live's tex.ch [12.186] by @d-q222 in #1352
- latex-suites: a timed-out unfiltered run takes its not-yet-run tests from l3build_selection by @d-q222 in #1358
- parity: re-read when a chunk boundary falls inside a number by @d-q222 in #1359
- lockstep: memory-layout-adjacent box and list cases 2103-2118 by @d-q222 in #1357
- pdftext: a malformed /Widths element falls back to MissingWidth instead of raising by @d-q222 in #1360
- lockstep: hlist/vlist glue-setting cases 1800-1814 by @d-q222 in #1345
- mac: hybrid-conceal and font-smoothing review follow-ups by @jay3332 in #1361
- Paste images: Finder drag-and-drop, #1305 review minors, iPad paste by @jay3332 in #1362
- engine: Pascal round() is web2c's zround, not f64::round (P-T2, 2003.11835v1) by @d-q222 in #1363
- editor: TeXpand M4–M10b + full TOML config (off by default) by @jay3332 in #1331
- lockstep: mode-independent processing cases 2200-2208 (tex.web part 49) by @d-q222 in #1366
- lockstep: e-TeX feature cases 2290-2299 by @d-q222 in #1369
- lockstep: font metric and ligature cases 2260-2268 (tex.web parts 30 and 10) by @d-q222 in #1368
- engine: pdfTeX's C ports round with zround too, not f64::round by @d-q222 in #1364
- engine: tex.ch's 2048pt font-scaling check and TFM name-length check by @d-q222 in #1370
- ipad: linked \begin/\end name editing (shared core) (IPAD-ENV-SYNC) by @jay3332 in #1330
- lockstep: building boxes and lists cases 2330-2337 (tex.web part 47) by @d-q222 in #1371
- lockstep: building math lists cases 2360-2370 (tex.web part 48) by @d-q222 in #1372
- lockstep: basic scanning cases 2390-2399 (tex.web part 26) by @d-q222 in #1373
- lockstep: extension whatsit cases 2420-2428 (tex.web part 53) by @d-q222 in #1374
- engine: TeX Live's string recycling — \tracingstats string counts match pdfTeX by @d-q222 in #1365
- tools/parity: normalise kpathsea's TEXMFVAR when unset (false P-T1 on 2501.08775v2) by @d-q222 in #1375
- texpand: structure editor columns count \multicolumn spans (#1331 review) by @jay3332 in #1377
- coordination: Commander authority to mac-claude-a (owner-directed) by @jay3332 in #1378
- ci: make trip, etrip and pdftex-regression part of CI required by @GoKubar in #1336
- ci(nightly): workspace-debug fits the hosted runner's disk by @jay3332 in #1379
- design review 2026-10-02: phase status, deviations, next lanes (supersedes #1334) by @jay3332 in #1381
- scripts: clean build outputs of harness-locked finished worktrees (J4) by @d-q222 in #1384
- incr-bench: newline, split and join edit kinds for the edit-replay soundness test by @d-q222 in #1387
- T4-NIGHTLY-CORPUS: nightly ~5,000-document corpus on the NixOS PC (sharded, host-ratcheted, memory-bounded) by @d-q222 in #1276
- T7: latency gate in tools/incr-bench (t7.py) + dl3-keys edit kinds; first Mac evidence (fails on main) by @jay3332 in #1391
- render-pipeline: beamer sans operator names for \operatorname and \DeclareMathOperator by @jay3332 in #1382
- P3-ZERO-TOLERANCE: exact f64 glyph positions through DL-v3 and DL3Renderer by @d-q222 in #1390
- iPad: folder access for pasted images, off-main re-encode; Mac smoothing-race fall-through (IPAD-FOLDER-ACCESS) by @jay3332 in #1380
- incr-bench: the from-scratch reference runs under the bare program name, as the host does by @d-q222 in #1392
- app-v3: zoom, GPU pinch and exact 512 px tiles above 3 px/pt (P3-V3-ZOOM-TILES) by @jay3332 in #1287
- texpand: multicolumn follow-ups to #1377 (keep {1}{spec}, unbraced args, byte-identical rows) by @jay3332 in #1394
- evidence: P4-PREAMBLE-COST -- preamble edit's 4.7 s is the old run's drop; #1300 fixes it by @jay3332 in #1396
- P4-CONVERGENCE: the convergence test follows the intrinsics' pointers (full-100 letter@start 99 → 3 pages) by @jay3332 in #1397
- ipad: paste follow-ups to #1380 (noAccess, transient bookmarks, pixel cap, pending offer, pruning) by @jay3332 in #1393
- app-v3 tiles: deterministic redraw-throttle test (manual clock) by @jay3332 in #1398
- P4-SOUNDNESS-D: two interrupted-compile soundness holes from sweep D (refs-30 false convergence, min-float-table 0-page PDF) by @jay3332 in #1399
- P4-MEMORY + P4-FINISH follow-up: host within its memory budget (plain-1000 7.4 -> 0.62 GB), keep-warm 10A, restore from the end, sound glyph-usage convergence by @GoKubar in #1300
- preview v3 tiles: cap clip growth, page-raster fallback, more tile coverage (#1287 follow-ups) by @jay3332 in #1395
- P5-APP-PARITY: one engine at a time; with the v3 preview on, the old engine compiles nothing by @GoKubar in #1340
- P5-APP-PARITY: ⌘B and the auto-compile setting drive the engine-v3 preview (stacked on #1340) by @GoKubar in #1342
- P5-APP-PARITY: Export PDF and Print under the v3 preview use the host's export: true (stacked on #1342) by @GoKubar in #1343
- ci: separate self-hosted switches for the Mac and NixOS runners by @d-q222 in #1349
- P5-APP-PARITY: bibliography and index under the v3 preview (protocol 3.2, external_tools from #1332's trust) (stacked on #1343) by @GoKubar in #1344
- mac: Project sidebar shows files as a folder tree (on by default) by @jay3332 in #1402
- mac snapshots: re-record 14 DesignSnapshots references stale after landed UI PRs by @jay3332 in #1403
- fix(clippy): workspace clippy-clean on CI stable 1.99.0 and nightly by @jay3332 in #1401
- app-v3 tiles: count kernel-purge redraws apart in the kept-raster tests by @jay3332 in #1405
- P4-EDIT-LATENCY: edited-page latency breakdown; restores no longer grow with converged compiles by @jay3332 in #1404
- P5-APP-PARITY-2: hyperref links are clickable in the engine-v3 preview (gap C8) by @jay3332 in #1408
- P5-APP-PARITY-2: current app-parity gap list (docs/evidence/app-parity-2026-10-03) by @jay3332 in #1411
- ci: P5 scoreboard and nightly T2/soundness/memory on self-hosted Macs while the PC is off (P5-BOARD-MAC) by @jay3332 in #1413
- INFDESC-APP: draw included PDF pages in the engine-v3 pane (title-page logo was blank) by @jay3332 in #1407
- INFDESC-APP: Infinite Descent app evidence + whole-book capture hooks (stacked on #1407) by @jay3332 in #1412
- P5-APP-PARITY-2: Page Up/Down, Fit Page, reading position across a reflow, dark ground in the v3 preview (gaps C2, C6, C7, C10; stacked on #1408) by @jay3332 in #1410
- RETIRE-S1: decouple survivors from the old engine (no behaviour change) by @jay3332 in #1400
- engine: Windows batch build + one os module per crate (ENGINE-PORTABILITY) by @jay3332 in #1406
- P5-ENGINE-CHOICE: per-document engine choice with visible fallbacks (app-parity A8, A9, A17) by @jay3332 in #1421
- licence boundary: close check E false negatives (#1400 follow-up) by @jay3332 in #1425
- P5-APP-PARITY-2: VoiceOver page text and the Pages rotor in the engine-v3 preview (gaps C18, C19; stacked on #1410) by @jay3332 in #1416
- incr-bench: TikZ \path[ and \path( are not verbatim by @d-q222 in https://github.com//pull/1420
- engine: tex.ch [29.530] prompt_file_name help line and empty-reply retry by @d-q222 in #1424
- displaylist: a PDF image's box goes out in bp, as protocol §5.2 says by @jay3332 in #1419
- infdesc: the new engine matches pdfTeX on the whole 592-page book (P-T1, P-T2); books corpus tier by @jay3332 in #1428
- engine: CwdResolver finds a TFM only as name.tfm; cwd-kpse returns ./sub/name by @d-q222 in #1422
- P5-ENGINE-CHOICE-2: engine-choice fixes before the default flip (#1421 review) by @jay3332 in #1427
- host: S0's key keeps only the barriers before S0 (imakeidx books compiled cold every time) by @jay3332 in #1414
- app-v3 VoiceOver: \d and \b read as dot below and macron below (#1416 follow-up) by @jay3332 in #1431
- P5-KEYSTROKE-MAIN: main-thread work per keystroke 41 → 11 ms (SwiftUI invalidation + editor redraw) by @jay3332 in #1432
- mac tests: deflake the hybrid-conceal on/off keystroke bench by @jay3332 in #1433
- incr: a cold run stops for newer work past S0 and keeps S0 (P4-COLD-PREEMPT) by @jay3332 in #1439
- P5-APP-PARITY-2: a stall bound for engine-v3 compiles that never finish (gap A15) by @jay3332 in #1417
- incr: drop an abandoned run's restart point with its engine (P4-RESTART-PAGECOUNT) by @jay3332 in #1442
- trip/etrip: fail closed on CRLF, hangs and missing DVItype (#1208) by @AarushRaheja in #1388
- preview-controller tests: kill the helper's process group, orphaned gates exit (#1221, #1329) by @AarushRaheja in #1389
- Follow-ups to #1417 and #1431: stale tool runs, progress hook reset, a progress engine test, dot-below reach by @jay3332 in #1438
- P5-APP-PARITY-2: polish under engine v3 (C4, C16, C21, C22, B8, A21) by @jay3332 in #1437
- V3-PACKAGE-RESOLUTION: packages, pins, libraries and Fetch under the new engine (app-parity A8, B11) by @jay3332 in #1444
- p5-scoreboard: bound the board's disk; stop cleanly when it runs low (P5-BOARD-DISK) by @jay3332 in #1447
- P5-APP-PARITY-2: "did you mean" fixes, Tab/Fix…, and Create for missing files under engine v3 (B10, B11; B9 not a v3 gap; stacked on #1409) by @jay3332 in #1430
- incr: read pdf_mem as pdfTeX does (beamer decks converge after an edit) (BEAMER-V3) by @jay3332 in #1446
- iso: a user action's unset fields are not compared (beamer navigation symbols converge) (BEAMER-V3) by @jay3332 in #1448
- preview v3: axis-aligned raster images without edge antialiasing, as Core Graphics draws PDF images (BEAMER-V3 app) by @jay3332 in #1451
- parity, incr-bench: a beamer tier, 13 decks, dl3-keys --line, and the BEAMER-V3 evidence by @jay3332 in #1449
- mac v3 pane: open at the pages' left edge when the restored zoom is above fit (BEAMER-V3 app) by @jay3332 in #1450
- evidence: beamer decks in the Mac app, engine-v3 preview; capture hooks for tiles and edits (BEAMER-V3 app) by @jay3332 in #1454
- P5-APP-PARITY-2: inline math hover preview under engine v3 (C24) by @jay3332 in #1435
- engine: tex.ch's DVI length check (dvi length exceeds "7FFFFFFF) by @d-q222 in #1423
- trip/etrip scripts: find web2rust under CARGO_TARGET_DIR by @d-q222 in #1429
- P5-APP-PARITY-2: flashtex-v3, build/check/watch on the new engine (D5) by @jay3332 in #1436
- P5-APP-PARITY-2: caret mark on the page and "page N" labels in the engine-v3 preview (C12, C17) by @jay3332 in #1434
- P5-T4-MAC: one oracle per board; T4 on the heavy Mac for the Mac route by @jay3332 in #1457
- tools/parity: the P5 board gives pdfTeX's traced pass enough time (2501.08663v2, chemfig-en) by @d-q222 in #1458
- Caret mark follow-ups: one storage observer, no window drift on outside changes, line table off main; LAN TLS tests skip a stalling path by @jay3332 in #1460
- tools/parity: T4 decision-1 v1 baseline is FINAL (440 IDs, oracle provenance) by @d-q222 in #1461
- preview v3: draw a PDF from each thread's own document; concurrent draws corrupted shadings (BEAMER-V3 app) by @jay3332 in #1452
- incr, dl3-keys: review follow-ups of #1446/#1448/#1449 (negative cases, box-only dead field, --line validation) (BEAMER-V3) by @jay3332 in #1455
- P5-PT1-SKIPS: narrow \pdfelapsedtime mask in P-T1 (tabu); hw2 oracle reference by @jay3332 in #1462
- lockstep: regenerate COVERAGE.md from main (1435 cases) by @d-q222 in #1463
- lockstep test_capture: case 037 ships two boxes, not one by @d-q222 in #1466
- engine: tex.ch [6.84] call_edit, the E response runs TEXEDIT by @d-q222 in #1426
- engine: CwdResolver decides absolute / explicitly relative as kpathsea's absolute.c does by @d-q222 in #1465
- engine: the shell for \write18, \input|cmd and \openout|cmd is started as sh, like system() by @d-q222 in #1464
- lockstep: 16 cases for primitives used by no case (date/time, interaction modes, errhelp, PDF state) by @d-q222 in #1467
- NOTEX-WIRING: compile with no TeX Live from a configured bundle (packer fixes, lock file, HELLO, embedded pool, app consent) by @jay3332 in #1471
- preview v3: tiles skip PDFs they do not meet, larger per-thread cache, orphaned pages from bytes; legacy-scroller nav fixes (BEAMER-V3 follow-ups) by @jay3332 in #1472
- lockstep: per-case opt-out of -halt-on-error (% lockstep: no-halt) by @d-q222 in #1468
- gate: run tools/lockstep's unit tests in the parity self-test step by @jay3332 in #1469
- lockstep: 13 no-halt cases for the \show family and \errmessage (needs #1468) by @d-q222 in #1470
- NOTEX hardening: consent bound to the source, pool dir owner, consent not cache decides by @jay3332 in #1473
- preview v3: DONE no longer touches every PDF page; superseded PDFs leave thread caches; margin/gap anchors (BEAMER-V3 follow-ups 3) by @jay3332 in #1474
- nixos runners: cap the runners' combined CPU at 50% of the PC by @jay3332 in #1476
- preview v3: draws keep their PDF alive; raw page access asserts; owner-state guard records safely; CLI e2e tests use a private format cache by @jay3332 in #1477
- tests: every process cargo starts gets a private engine cache; gate fails a leak to HOME by @jay3332 in #1479
- packages: the v3 retry backoff test owns its clock and timer (flaky on loaded runners) by @jay3332 in #1482
- design: live collaboration (adopted) (LIVE-COLLAB-DESIGN) by @jay3332 in #1376
- collab: live-share P0 -- collab-v1 CRDT core (Swift) and Rust oracle by @jay3332 in #1488
- bridge tests: serialise forks so an inherited flock cannot hold a journal (unblocks hosted merge queue) by @jay3332 in #1490
- engine: Windows hardening after #1406 (#1418) by @jay3332 in #1478
- iso: a failing convergence test fails fast; the walk reads words without dynamic dispatch (P6-HYPEROPT) by @jay3332 in #1495
- iso: the scratch heads' links are dead between commands; an edit converges on the next page (P6-HYPEROPT) by @jay3332 in #1497
- displaylist: the glyph loop computes per string what is the same for every glyph (P6-HYPEROPT) by @jay3332 in #1496
- docs/evidence: P6-HYPEROPT profiles, hotspots, A/B counts and soundness (2026-10-04) by @jay3332 in #1500
- p6: instruction counts in DONE's stages; dl3-keys --edit (P6-HYPEROPT measurement) by @jay3332 in #1494
- display-list-v3.3: Typst additions E1–E8 in the shared spec and crate (T0); R6 lifted by @jay3332 in #1480
- CODEOWNERS: display-list spec/crate and typst-host (DESIGN §15.9) by @jay3332 in #1503
- IDIOMATIC-REWRITE: plan (REWRITE.md) and pilot, writet1 rewritten into idiomatic safe Rust by @jay3332 in #1501
- engine: Windows sockets owner-only from creation, fail closed (#1418 follow-ups) by @jay3332 in #1508
- mac: closed document windows deallocate; editor, watcher and v3 session leaks fixed; dealloc guards by @jay3332 in #1491
- incr: a barrier blocks reuse only past where it is read; Infinite Descent converges (P6-HYPEROPT) by @jay3332 in #1498
- mac tests: deflake the suite on loaded runners without weakening the checks by @jay3332 in #1510
- typst-host T1: watchdog (hanging plugin, runaway for, runaway memory stopped within budget) by @jay3332 in #1486
- typst-host T1: glyph positions from typst-pdf's export + the positions checker (0 mismatches on Typst's test suite) by @jay3332 in #1483
- typst-host T1: seeded 1-pass loop + idle check (216/216 == standard); positions export only the sent pages by @jay3332 in #1485
- engine: tex.ch [26.449] \mkern recovery, [25.369] \noexpand\endwrite, and five more tex.ch/texmfmp.c gaps by @jay3332 in #1506
- docs/design: MACRO-REPLAY, guarded replay of macros with arguments (P6-MACRO-REPLAY design) by @jay3332 in #1509
- mac: apply_group reply settles in its waiter; DesignSnapshots split determinism + 8 shell re-records by @jay3332 in #1515
- typst-host T1: paths and clips from the PDF's numbers (clears §15.5's 408-pixel case) by @jay3332 in #1487
- XeTeX port S0: web2rust translates xetex.web (TFM fonts), P-T1 1364/1364, XDV 1361/1361 by @jay3332 in #1489
- docs(xetex): plan v2 for S1-S3 (one FlashTeX engine, no separate TeX) by @jay3332 in #1521
- docs: modes design — Classic, Unicode, Typst + opt-in Native (adopted with owner rulings) by @jay3332 in #1520
- evidence: Typst T0 exit gate measured (typst-t0-2026-10-04) by @jay3332 in #1481
- typst-host T1 World: package lock, offline by default, consent, per-project font list by @jay3332 in #1484
- mac: sidebar tree hover follows the pointer; column stays the tree's width by @jay3332 in #1527
- T1 evidence: Typst host latency at low load (99/300/999 pages; targets not met here) by @jay3332 in #1511
- bundle: publish the no-TeX-Live bundle as GitHub Release assets (BUNDLE-PUBLISH) by @jay3332 in #1523
- typst-host: colours, alpha, spot colours and stroked text from the PDF (v3.3 E3, E4) by @jay3332 in #1513
- bundle: final symlink walk in fetch_image; refuse other-nonfree, nosource, shareware (#1523 follow-up) by @jay3332 in #1535
- Live Share P1 (1/3): collab-v1 transport and session layer by @jay3332 in #1530
- mac: open with an untitled blank article instead of "Hello FlashTeX." by @jay3332 in #1544
- COLD-SPEED: the host stops walking the input stack per allocation and per \def (−13 % on Infinite Descent) by @jay3332 in #1536
- incr: a later lookup whose answer changed blocks convergence (fixes #1502) by @jay3332 in #1507
- xetex S1: vendor TeX Live 2026's HarfBuzz 12.3.2 and FreeType 2.14.1 by @jay3332 in #1545
- engine: #1506 follow-ups: byte-exact -output-comment, null-safe mktex flag, the flag across restores, input_line in diagnostics by @jay3332 in #1519
- live30: keystroke stage measurement (DONE.stages.queue_by, dl3-keys --interval-ms) + Phase 1 evidence (LIVE-30MS) by @jay3332 in #1533
- mac: a keystroke's splice counts only the text near the edit, not the whole document (LIVE-30MS E) by @jay3332 in #1538
- throughput.ch [3][4] + inlined token layer: −16% instructions on Infinite Descent (P6-HYPEROPT) by @jay3332 in #1499
- coordination: Commander returns to kabir-claude (owner Kabir); critical path first by @GoKubar in #1558
- errrec: best-effort preview; fatal errors keep the last good pages (ERROR-RECOVERY 1/2) by @jay3332 in #1553
- docs/design: review 2026-10-05, the P3–P5 critical-path inventory by @GoKubar in #1560
- live30 D: a compile after a starved one is not preempted before its edited page, and sends it when superseded (LIVE-30MS) by @jay3332 in #1541
- live30 C: no convergence jump while newer work waits; the viewport page's test is interruptible (LIVE-30MS, soundness: strict review) by @jay3332 in #1542
- live30 B: reattaching an abandoned run leaves the restore to its target prepared (LIVE-30MS) by @jay3332 in #1543
- live30 A: old checkpoints' chunk values kept between convergence comparisons (LIVE-30MS, soundness: strict review) by @jay3332 in #1548
- incr: a file read while open for output is read as from scratch (#1550) by @jay3332 in #1556
- web2rust --array-view: mem and eqtb through a local header copy, -3.2 to -4.1% instructions (P6-HYPEROPT; stacked on #1499) by @jay3332 in #1572
- errrec: fixing a fatal error restarts from a checkpoint, not cold (ERROR-RECOVERY 2/2) by @jay3332 in #1554
- ci: merge queue runs only the gate (≤12 min engine, ≤5 otherwise); the rest is post-merge with main-red by @GoKubar in #1586
- ci: merge-queue engine parity on hosted runners (5 shards), cargo check in the gate by @GoKubar in #1587
- ci: fold the six sub-minute gate jobs into one (gate run: 10 hosted jobs, not 15) by @GoKubar in #1588
- nightly: T2 finds its formats, a stall timeout replaces the 1800 s cap, engine gates on hosted legs (NIGHTLY-GREEN) by @GoKubar in #1574
- DESIGN: owner (Kabir) confirms the 2026-10-04 directions; exact geometry is capability-gated by @GoKubar in #1577
- docs(display-list-v3): minor/capability labels for sections 7-10 and PACKAGE (P5-CHECKS 4) by @GoKubar in #1565
- diag: selector codes from the translation; §6.7 matches the host again (P5-CHECKS 3) by @GoKubar in #1571
- display list: a dest carries only the words pdfTeX writes for its kind (fixture soundness on main) by @GoKubar in #1568
- incr: close #1348's two restore holes (and a stale S0 key they hid) by @GoKubar in #1569
- incr, host: racy stat signatures prove nothing; an absolute name's lookup depends on its own directory (pre-existing, from #1549's review) by @jay3332 in #1552
- ci: run the no-TeX-Live gate weekly on hosted runners by @GoKubar in #1563
- P5-CHECKS: app-parity re-audit at 0752115 (docs/evidence/app-parity-2026-10-05) by @GoKubar in #1564
- errrec: locate runaway arguments, explain TeX's errors, mechanical fixes (ERROR-RECOVERY 3) by @jay3332 in #1566
- MEM-FOOTPRINT 1: virtual-font packets shared across checkpoints (−233 MB on Infinite Descent); Phase 1 memory breakdown by @jay3332 in #1567
- live30 follow-ups: CANCEL stops a protected run, protection never repeats, editor-scoped fast-path anchors, DONE.stages documented by @jay3332 in #1576
- docs(ci-cd): measured PC engine-parity shard times replace the estimates by @GoKubar in #1589
- DESIGN §13: merge fast, test later (owner 2026-10-05) by @GoKubar in #1590
- Live Share P1 (3/3): presence, invite/join/approve UI, settings gate by @jay3332 in #1540
- ci: zero-tolerance preview sweep after the merge (P3 gate, P3-REVERIFY) by @GoKubar in #1596
- DESIGN: P3 exit gate met (verified and gated on main) by @GoKubar in #1601
- incr: newline and paragraph split/join edits converge (P4-NEWLINE-CONVERGE, DESIGN.md §5.3 rule (c)) by @GoKubar in #1570
- host, incr: less work before the edited page on 1,000-page documents (P4 split row) by @GoKubar in #1597
- display list: a Type 1 program's built-in encoding is worked out once, not at every restore (P4-PAGE-COST) by @GoKubar in #1603
- display list: SHA-256 with x86's SHA extensions where the CPU has them (P4-PAGE-COST) by @GoKubar in #1604
- texlines: spans and diagnostics count lines as TeX does (CR, LF, CR LF) by @GoKubar in #1599
- lineshift: one file under two names is one shift (#1591) by @GoKubar in #1595
- diag: new-engine diagnostics at parity with the old engine and beyond (DIAG-PARITY) by @jay3332 in #1592
- retire S2: delete the nine crates with no consumer, with a reference check and allowlist (#1236) by @GoKubar in #1610
- P5-RETIREMENT: engine-v2 retirement plan (revision 3: 9-crate S2, S6a move step, a revert check that can fail, rows per stage) by @d-q222 in #1236
- retire S3r: capture features per engine, and an engine label in the log, typing bench and attribution tools (#1236) by @GoKubar in #1611
- t7: continuous typing rows, own-page gate, CPU-quota throttling (P4-REAL-LATENCY step 1) by @GoKubar in #1605
- incr, checkpoint: an abandoned run's PDF tail is handed to the next restore, not written back (P4-REAL-LATENCY) by @GoKubar in #1608
- scripts/t7-reference.sh: the P4 gate's one-shot T7 reference run on an idle Apple-Silicon Mac (Q1; stacked on #1605) by @GoKubar in #1609
- host: engine-thread instruction counts on Linux, and the typesetting to the edited page on its own (P4-PAGE-COST) by @GoKubar in #1600
- host, display list: moving source spans no longer hashes every span after the edit (P4-PAGE-COST; stacked on #1597) by @GoKubar in #1602
- xetex: rpath the C++ runtime on Linux, as #1232 did for the engine (NixOS libstdc++) by @jay3332 in #1579
- gate: quick passes on the NixOS PC (png-gamma heap padding, texch SIGINT, xetex rpath #1579, rustfmt detection) by @GoKubar in #1616
- lockstep: no-halt tests accept any pdftex; CI runs the lockstep self-tests by @GoKubar in #1622
- incr: the compile's change check takes the host's copy of the editor's file instead of reading it again (P4-PAGE-COST; stacked on #1602) by @GoKubar in #1606
- arena: a prepared restore makes its redo ahead too (P4-PAGE-COST) by @GoKubar in #1607
- P5 board: T4 crash row, the owner's bar, the p5-red gate, one official host (P5-BOARD-T4) by @GoKubar in #1598
- incr: a checkpoint's PDF position corrections are composed into one, not one per convergence (P4-PAGE-COST) by @GoKubar in #1617
- incr: segment checkpoints before the edited page only where newer work stops the run (P4-PAGE-COST) by @GoKubar in #1614
- DESIGN §5.2/§13: record segment hold (#1614) by @GoKubar in #1623
- app: documents that need Unicode fonts route visibly to the compatibility engine (P5-FONTSPEC-FALLBACK, S5 precondition) by @GoKubar in #1624
- UnicodeFonts: \let and definers consume their names in unread branches too (#1624 follow-up) by @GoKubar in #1625
- DESIGN §1.2/§13: latency gate covers typing up to 200 wpm by @GoKubar in #1626
- app: v3 Preview Debug Status shows the session's counters (row C25) by @GoKubar in #1627
- host: undo logs get mappings of their own, which free gives back (Linux; P4-MEMORY-BUDGET) by @GoKubar in #1620
- t7.py: typing@50ms, @60ms and @80ms rows (P4-TYPING-200WPM) by @GoKubar in #1631
- P-T2: images hashed as streams, the qdf copy compressed (#1621) by @GoKubar in #1635
- app: v3 chrome tooltips name the new engine; HUD page count helper (C21, C9, C20) by @GoKubar in #1628
- host: a keystroke's wait in engine instructions and cycles, by part (P4-TYPING-200WPM) by @GoKubar in #1634
- app tests: v3 crash limit and retry, export conflict, box warnings, bridge anchors (A13, A14, D2, B3, E4) by @GoKubar in #1630
- ci: run the engine-v3 host tests for real (mac-v3-host); A19 and B3 host tests by @GoKubar in #1633
- release: ship flashtex-host in the app and flashtex-v3 + host in the CLI tarball (row D5) by @GoKubar in #1632
- parity: the app-parity row -> test check (retirement plan §4.4, S4(h)) by @GoKubar in #1629
- arena: the next restore worked out ahead stops promptly when a key arrives (P4-TYPING-200WPM c) by @GoKubar in #1636
- run-mac-dev.sh: actually build flashtex-bridge by @GoKubar in #1640
- checkpoint, system: a restore keeps the old output tail in the file instead of reading and cutting it (P4-PAGE-COST) by @GoKubar in #1613
- DESIGN §1.2/§13: owner's speed & memory targets (2026-10-06) by @GoKubar in #1644
- corpus: infdesc_x2.py, Infinite Descent ×2 as the heavy benchmark by @GoKubar in #1646
- incr, readset: rs_seen's rebuild after a corrected restore is kept per checkpoint (P4-PAGE-COST; stacked on #1617) by @GoKubar in #1618
- ci: one heavy job at a time on the PC (T4 and the P5 board), smaller scopes by @GoKubar in #1657
- docs/evidence: MEM-RESEARCH, ranked ways to cut memory without costing speed by @GoKubar in #1661
- incr-bench: beamer decks in T7 (beamer-5, beamer-30), so beamer is gated (BEAMER-LATENCY) by @GoKubar in #1662
- app: place host diagnostics named by the project copy's real path (B3) by @GoKubar in #1637
- ci: sweeps.yml, the soundness sweeps sharded on GitHub-hosted runners (CI-SWEEPS-HOSTED) by @GoKubar in #1648
- corpus: infdesc_x2.py's second copy inputs chapter files of its own (#1646 follow-up) by @GoKubar in #1660
- packaging: --full requires and verifies the host; smoke-step SIGPIPE; source URL (D5 follow-up) by @GoKubar in #1641
- host, incr: a keystroke that changes nothing has its page at once (P4-TYPING-200WPM d) by @GoKubar in #1639
- app parity: host-leg row check, Rust self-skip rule, checklist 2026-10-06 revision (#1629 follow-ups) by @GoKubar in #1647
- t7: the books infdesc and infdesc-x2 (mkbook.py), typed in a chapter by @GoKubar in #1659
- host: a project root with
..(or a link) holds its resolved files (span under a..root) by @GoKubar in #1672 - ci: t7-reference.yml, T7 on the heavy M1 Max (the P4 gate's latency number) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1677
- incr: a stopped run's own written files are not changed inputs when it is continued (Infinite Descent convergence) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1682
- host: performance modes (Low Memory / Balanced / High Performance), profile-v1, switchable live (PERF-MODES) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1649
- host: S₀'s key check stats and hashes each path once (BEAMER-LATENCY) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1686
- app: Settings > Performance (Low Memory / Balanced / High Performance), live (PERF-MODES) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1652
- docs: owner rulings on A6, A7, A18, C5, C23 accepted (2026-10-07); S5 app parity reads met by @GoKubar in https://github.com/flash-tex/flashtex/pull/1676
- parity: gate --log over both legs counts a test passed on either one by @GoKubar in https://github.com/flash-tex/flashtex/pull/1683
- fix(mac): engine-v3 preview leaked every page raster (9.6 GB): drain the DL3 reader thread's autorelease pool by @GoKubar in https://github.com/flash-tex/flashtex/pull/1687
- incr-bench: dl3-coldopen and coldopen.py time a document's first open; DONE says how each pass ran (COLD-OPEN) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1673
- incr, checkpoint: a first compile anchors its later passes where \document begins; edits during the open restart near the edit (COLD-OPEN) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1684
- displaylist: a page shipped again from the same inputs keeps its display list (−8.6 % instructions on a 1,072-page open; COLD-OPEN) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1688
- macroprof: profile each edit's window in the host; Infinite Descent's edited page attributed (P6-INFDESC-PAGE step 1) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1670
- app: a relaunch takes the project's last copy over (its .aux and S₀ kept: one pass instead of 2-3; #1537 taken over, COLD-OPEN) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1689
- COLD-SPEED: a relaunch takes the project's last copy over (S₀ and .aux kept: 1 pass instead of 3 on Infinite Descent) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1537
- throughput.ch [6]: macro_call reads a braced argument's tokens in place (P6-ENGINE-SPEED, −2.7 to −3.0 % instructions) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1693
- incr, displaylist: a live node's source position is compared at a convergence (latent span hole) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1690
- web2rust: packed-record fields set by a store of the field alone (P6-ENGINE-SPEED, −2.3 to −2.5 % instructions) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1697
- P5 board: the new engine is the T4 run's own binary (no rebuild) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1698
- incr: a written file the old run reads later is no barrier when both runs hold the same bytes by @GoKubar in https://github.com/flash-tex/flashtex/pull/1694
- MEM-FOOTPRINT 2: far from the cursor only page checkpoints stay, within the budget too (Infinite Descent logs 810 → 382 MB; stacked on #1567) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1573
- engine host: undo-log mappings on macOS (MEM-IMPL-HOST item 5) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1696
- mac: the editor stays instant while the preview streams a cold compile (APP-EDITOR-INSTANT) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1664
- mac: a DONE maps diagnostic lines through one index, and hashes off main (APP-EDITOR-INSTANT) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1665
- tests: host_lifetime idle timeout and structural L5 assertion no longer depend on CPU load by @GoKubar in https://github.com/flash-tex/flashtex/pull/1699
- notex gate: also check the app's path, flashtex-host from the bundle alone by @jay3332 in https://github.com/flash-tex/flashtex/pull/1700
- flashtex-v3: build progress on a terminal; PROGRESS names the file (lane CLI-PROGRESS) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1653
- COLD-START: host start-up does kpathsea once and faster, checks the format in-process, warms up minimally by @jay3332 in https://github.com/flash-tex/flashtex/pull/1655
- system: a \write stream's buffer is the platform stdio buffer, as pdfTeX's FILE (#1557) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1663
- COLD-START: the parsed font map cached on disk, messages kept exact by @jay3332 in https://github.com/flash-tex/flashtex/pull/1678
- resolver: per-session kpathsea lookup memo, kept while every directory the lookup depends on is unchanged (body keystroke -52% instructions) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1561
- COMPILE-SPEED: line-shift flags out of thread-locals; delimited arguments and definition bodies read in place (throughput.ch [5] [6]) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1674
- engine: clear messages when there is no TeX Live and the bundle is unusable by @jay3332 in https://github.com/flash-tex/flashtex/pull/1701
- mac: fit Settings tabs in the toolbar so Performance is reachable by @jay3332 in https://github.com/flash-tex/flashtex/pull/1702
- diag: host compiles record macro definition sites, and the app uses them (#1593) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1675
- COLD-START: kpathsea reads ls-R whole and splits it in place by @jay3332 in https://github.com/flash-tex/flashtex/pull/1679
- incr: a lookup depends on every directory kpathsea searched, not only the working one (#1562) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1680
- mac: wait 3 s before the missing-package sheet while a package name is typed by @jay3332 in https://github.com/flash-tex/flashtex/pull/1691
- PREAMBLE-FAST: a preamble edit restarts at a checkpoint between the preamble's lines, not from the format by @jay3332 in https://github.com/flash-tex/flashtex/pull/1551
- host_incremental: the progress test accepts a first heartbeat in the preamble (main red) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1703
- xetex: font lookup by name, platform-free (XETEX-S1) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1547
- XeTeX S1: per-engine host state and a checkpointed handle allocator by @jay3332 in https://github.com/flash-tex/flashtex/pull/1546
- xetex S1: native fonts, native word and glyph nodes, XDV native-font records by @jay3332 in https://github.com/flash-tex/flashtex/pull/1642
- xetex S1: TECkit font mappings (mapping=tex-text) and input normalisation by @jay3332 in https://github.com/flash-tex/flashtex/pull/1643
- xetex S2: OpenType math (XeTeXOTMath.cpp) through HarfBuzz's math API by @jay3332 in https://github.com/flash-tex/flashtex/pull/1645
- xetex S2: pictures (XeTeX_pic.c) for \XeTeXpicfile, \XeTeXpdffile and graphicx by @jay3332 in https://github.com/flash-tex/flashtex/pull/1650
- coordination: Commander is mac-claude-a (quiesced handoff + owner instruction) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1704
- logalloc: realloc never lets the kernel move a block; a mapping cap below max_map_count (#1620 follow-ups) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1658
- mac: encode and write COMPILEs off the main thread (APP-EDITOR-INSTANT) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1667
- mac: the scans a pause in typing starts run off the main thread (APP-EDITOR-INSTANT) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1668
- mac: a keystroke hands the model a spliced text, not a transcode of the buffer (APP-EDITOR-INSTANT) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1669
- engine: a persisted S₀ carries pdfTeX's image table, verified on open (beamer reopens warm; COLD-OPEN) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1685
- main red: bundle_notex reads TeX Live's own files only; web2rust clippy is_multiple_of by @jay3332 in https://github.com/flash-tex/flashtex/pull/1707
- mac: no whole-document work per keystroke in the marks rebase and the chrome refresh (APP-EDITOR-INSTANT) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1666
- Branding: logo, favicons, social card, Mac and iPad app icons by @jay3332 in https://github.com/flash-tex/flashtex/pull/1709
- mac: bound the glyph-index cache; memory pressure trims caches and sends TRIM (trim-v1) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1671
- xetex S2b: PDF parity harness against xelatex (structural + visual, PLAN §3.5) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1708
- xetex S2b: ship_out to display-list-v3 in PDF mode, with dvipdfmx's specials (PLAN §3.2) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1710
- ci: gate checks and engine T0 get 75 minutes (hosted ubuntu runs hit 45) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1713
- incr: a preamble edit restarts in the middle of the line after a package (PREAMBLE-MIDLINE, #1594) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1714
- engine host: jemalloc for the non-log heap on Linux (MEM-IMPL-HOST item 4) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1695
- xetex: confine the -output-directory shortcut of \input (Live Share security) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1715
- incr: a run that does not converge thins the old run's future behind it (P4-MEMORY-BUDGET) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1619
- evidence: PASS-REUSE design note — pass 3's state never equals pass 2's (no product change) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1705
- engine: files read only to hash them are hashed through a buffer; S0's view lists its chunks (MEM-MODES 1/4) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1719
- kpathsea: ls-R as a packed index, mapped from a cache file (MEM-MODES 3/4) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1721
- ci: perf runs on PRs only for the crates perf-bench links by @jay3332 in https://github.com/flash-tex/flashtex/pull/1731
- xetex S2b: FlashTeX's PDF writer from the display list (Unicode mode; stacked on #1710) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1712
- incr: convergence test (b) counts only reads before the old run's last page checkpoint by @jay3332 in https://github.com/flash-tex/flashtex/pull/1729
- arena: a convergence test keeps the old values the jump compares (P4-CONVERGE-REWIND) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1711
- arena: a stopped preparation goes on where it stopped; dropped at a reattach (P4-CONVERGE-REWIND) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1717
- mem_gate.sh: the host's peak RSS over T7's phases too, 1.0 GB at 1,000 pages (P4-MEMORY-BUDGET) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1615
- xetex S2b: subset CID-keyed CFF fonts by CID; unified ideographs in ToUnicode (stacked on #1712) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1718
- engine: the font map is kept compact, mapped from its disk cache (MEM-MODES 2/4, stacked on #1719) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1720
- midline: fill keeps the last character when endlinechar is inactive (stacked on #1714) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1725
- incr-bench: sound-pre covers mid-line restarts on full-100t (stacked on #1714) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1726
- modes: [project] mode, % !TEX program and flashtex-v3 --mode pick the engine host by @jay3332 in https://github.com/flash-tex/flashtex/pull/1733
- checkpoint: S₀ and the .aux point at \begin{document}, not at auxhook's preamble expansion of \document by @jay3332 in https://github.com/flash-tex/flashtex/pull/1727
- incr: long_state is dead at a checkpoint (the L5 patch was refused on it) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1728
- RUST-TOOLS: makeindex in Rust, in-process for \write18 and the host (no TeX Live needed) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1706
- xetex S3 stage 1: flashtex-host-unicode, Unicode mode's engine host (cold; stacked on #1712) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1732
- arena, sweeps: stopped preparations in sweep D; idle trim drops them; OLDCACHE verify on production's schedule by @jay3332 in https://github.com/flash-tex/flashtex/pull/1740
- parity: a broken pool's workers always die; the gate self-tests can't hang by @jay3332 in https://github.com/flash-tex/flashtex/pull/1744
- xetex S3: [fonts] in Unicode mode as fontspec/unicode-math hooks (stacked on #1732) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1734
- mac: a Unicode document runs in flashtex-host-unicode (xelatex), chosen per document (stacked on #1733) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1735
- mac modes M5: mode item, switch to [project] mode, Unicode suggestion and [fonts] notice (stacked on #1735) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1743
- RUST-TOOLS: bibtex in Rust (web2rust over bibtex.web), in-process in the host and \write18, works from the bundle alone by @jay3332 in https://github.com/flash-tex/flashtex/pull/1723
- host: Low Memory starts with the allocator that returns freed pages (macOS; MEM-MODES 4/4) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1722
- journal: \pdffilesize and \pdffilemoddate are reads of the file (stale size/date after a restart) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1724
- xetex: the_pdf_is_reproducible sets FORCE_SOURCE_DATE=1 (the merge-queue flake: /Creator raced the minute) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1745
- runtime 1/n: crates/flashtex-runtime (persist, os, busy, memstat, logalloc moved out of flashtex-engine; pure move) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1738
- incr: READ-REVALIDATE, a size or date read that left nothing behind no longer holds the restart back (stacked on #1724) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1736
- incr: a whole read at the document's start whose file changed is read again (review of #1724; stacked on #1736) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1739
- key: a persisted S0 checks the reads at the document's start (review of #1739; stacked) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1742
- xetex host: #1732 review follow-ups (queued cancels, INITEX on the lifeline, world-writable manifest refused) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1746
- incr, host: each lookup is checked against the directories it searched instead of made again at every keystroke (LOOKUP-SKIP) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1747
- host: write the persisted S0 on a writer thread (COLD-FIXED 2) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1749
- writet1: reuse embedded Type 1 fonts across runs (COLD-FIXED 4) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1751
- fmtimage: install the loaded format's image instead of undumping it again (COLD-FIXED 3) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1750
- Focus the preview on one \include chapter (LaTeX's own \includeonly) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1716
- formats: a cache hit checks each recorded lookup against the directories it searched, within a host (FORMAT-VALIDATE) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1752
- Bundle texbundle-tl2026-2: bibtex/makeindex styles and common bibliography styles (closes the RUST-TOOLS bundle gap) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1737
- hashcache: hash each unchanged input file once per process (COLD-FIXED 1) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1748
- COLD-FIXED follow-ups: S0 under Low Memory and S0's own definition sites, local-volume hash cache, Type 1 limit by mode by @jay3332 in https://github.com/flash-tex/flashtex/pull/1753
- arena: the idle trim gives back pages TeX cleared (MEM-BASELINE 2/3) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1756
- S0: the image's copy of the chunks in pages of its own (blank open 74 -> 45 MB; #1749 follow-up) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1758
- mac: delay the stale-page dim and make it a setting by @jay3332 in https://github.com/flash-tex/flashtex/pull/1754
- logalloc: macOS large blocks in mappings of their own, with spares (MEM-BASELINE 1/3) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1755
- S0 v5: a reopen maps S0's pages into the word space (MEM-BASELINE 3/3; stacked on #1756) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1757
- preview-v3: draw glyph_ids fonts by glyph id (Unicode-mode garbage text) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1759
- MEMORY-SAFETY: host leaks fixed (zlib per restore, kpathsea per lookup, 18 MB at start, orphan host), Miri/ASan findings, sanitizer and leaks guards by @jay3332 in https://github.com/flash-tex/flashtex/pull/1493
- MEMORY-SAFETY: host soak, compose position corrections, bound taken, soak gate (depends on #1493) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1505
- xetex host: hot spares, indexed font map (XETEX-FAST) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1761
- runtime 2a: StatSig (and the racy window) into crates/flashtex-runtime by @jay3332 in https://github.com/flash-tex/flashtex/pull/1760
- U3c: Unicode mode with no TeX Live — bundle contents, app packaging, notex check (stacked on #1737) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1762
- authority: kabir-claude is Commander again (owner instruction, 2026-10-11) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1763
- DESIGN §12: P4 and P5 status as of 2026-10-11 (P5-STATUS) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1766
- docs(retirement-plan): mark S2 landed (#1610) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1764
- mac tests: 1 MB completion latency bound is 40 ms on hosted runners by @GoKubar in https://github.com/flash-tex/flashtex/pull/1770
- parity tests: second-SIGTERM test no longer races a 0.5 s grace by @GoKubar in https://github.com/flash-tex/flashtex/pull/1769
- ci: the P5 board on a GitHub-hosted route, T4 included (S4(a)) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1774
- mac: page label placed again when its layer enters the layer tree by @GoKubar in https://github.com/flash-tex/flashtex/pull/1772
- tests: persisted-S0 test waits for the S0 writer before killing its host by @GoKubar in https://github.com/flash-tex/flashtex/pull/1768
- mac tests: held-edit export test no longer misses a fast export run by @GoKubar in https://github.com/flash-tex/flashtex/pull/1771
- retire S1b (not-RQ5 parts): boundary self-tests in CI, stale ShellModel probes out, review-workflow.json's unused provenance out by @GoKubar in https://github.com/flash-tex/flashtex/pull/1767
- tests: preview-controller waits up to 30 s for its fake compiler to start by @GoKubar in https://github.com/flash-tex/flashtex/pull/1785
- UNICODE-M3: the M3 gate measured on hosted runners (not met), harnesses and corpus by @GoKubar in https://github.com/flash-tex/flashtex/pull/1799
- docs: record the RQ19, release, RQ5, RQ6 and hosted-board rulings by @GoKubar in https://github.com/flash-tex/flashtex/pull/1807
- deps: bump Pillow to 12.3.0 (Dependabot high alerts) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1808
- app, release: link the engine's GPL source from the About panel and release notes (#1806) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1810
- release: prepare v0.2.0 (notes, checklist; nothing tagged) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1811
- xetex: the bundle's fonts by name with no TeX Live (#1783; replaces #1793) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1814
- bundle: texbundle-tl2026-4 (Unicode corpus gaps + font-name index) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1786
- xetex: ICU's line breaker for \XeTeXlinebreaklocale (fixes the polyglossia manual's mem[null] panic) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1816
- PLAN.md §5: the ICU deviation and its risk; gate.sh: third_party/ rebuilds flashtex-xetex by @GoKubar in https://github.com/flash-tex/flashtex/pull/1819
- xetex: Unicode start-up −44 %, host HELLO −98 %, fonts' catalog kept (M3-FAST) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1820
- M3-RTL: ICU's bidi algorithm for native words (Hebrew, Arabic), as XeTeX uses it by @GoKubar in https://github.com/flash-tex/flashtex/pull/1812
- xetex out: beamer's links and soft mask (M3 export gate: u11 now equal) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1809
- M3: the polyglossia manual equal in P-T1 (one font file per name for the oracle) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1822
- xetex host: the engine runs in the host's process, from the state after the format load (XETEX-INCR step 1) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1779
- xetex host: S0 at the document's start; a body edit re-runs only the body (XETEX-INCR step 2) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1790
- Unicode mode: preview-vs-xelatex parity sweep + image colour, glyph size and rule fixes by @jay3332 in https://github.com/flash-tex/flashtex/pull/1778
- xetex: ICU's bidi runs in measure_native_node — right-to-left text (fixes #1777) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1788
- xetex: source map for Unicode mode — click-to-source, forward search, caret follow (fixes #1789) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1794
- xetex host: diag-v1 for Unicode mode — token, code, help, trace (fixes #1791) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1796
- xetex PDF: ToUnicode for AAT contextual forms — Arabic copy/search in exports (fixes #1787) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1797
- mac: page label placed for its layer's on-screen flip (testEachPageIsLabelled flake) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1821
- xetex host: page checkpoints; an edit restarts at the page before it (XETEX-INCR step 3) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1795
- unicode-m3: profile_startup.py's cost parser needs a leading digit (unicode-startup profile job) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1824
- xetex conv: review follow-ups (claim check, ToC at the end) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1802
- M3 export gate: ToUnicode as xdvipdfmx writes it; outlines compared at their stated resolution by @GoKubar in https://github.com/flash-tex/flashtex/pull/1825
- M3 export gate: R1 (xelatex's own error counted as P-T1 counts it), 48 of 48 by @GoKubar in https://github.com/flash-tex/flashtex/pull/1827
- xetex host: a persisted S0 for reopening a document (UNICODE-POLISH 2) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1805
- mac: zoom tiles framed for the page layer's on-screen flip (same race as #1821) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1823
- bundle: texbundle-tl2026-5 (-4 + glyphlist) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1826
- xetex: count instructions to the edited page exactly (a per-page marker for callgrind) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1829
- mac: detached-layer tests that catch the old tile flip; layerShownFlipped fixed; send-off-main asserts the thread by @GoKubar in https://github.com/flash-tex/flashtex/pull/1831
- xetex PDF: fmt_num rounds in integers (byte-identical to format!), the preview PDF's number formatting by @GoKubar in https://github.com/flash-tex/flashtex/pull/1835
- xetex: S0 at the real \begin{document}, not where bidi patches \document (polyglossia RTL) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1837
- README benchmarks: the new engine against pdflatex, xelatex and latexmk (BENCH-README) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1844
- texbundle: gate documents that fail to fetch stop refs/gate, not skipped by @GoKubar in https://github.com/flash-tex/flashtex/pull/1845
- p5 hosted T4: fetch e-prints first, retried and sha256-verified; fail loudly by @GoKubar in https://github.com/flash-tex/flashtex/pull/1846
- deps: rustls 0.23.44 -> 0.23.45 (GHSA-2mjx-qc3c-rqvc) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1843
- xetex out: PDF numbers without format! (FMT-NUM), byte-identical; -67% instructions per keystroke by @jay3332 in https://github.com/flash-tex/flashtex/pull/1833
- displaylist: content-stream interpreter 4x faster, byte-identical; edited page -10% instructions on articles (CLASSIC-HOTSPOTS) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1839
- docs(retirement): record S2 (#1610) and S3r (#1611) as done; refresh S4 by @GoKubar in https://github.com/flash-tex/flashtex/pull/1847
- parity: host field in baseline-fixtures.json (S1b, RQ8) by @GoKubar in https://github.com/flash-tex/flashtex/pull/1848
- T7-FIX: keep a document's phases on a harness error; hosted Mac T7 smoke; the 31 misses classified by @GoKubar in https://github.com/flash-tex/flashtex/pull/1850
- iso: the convergence test walks token lists last; Classic keystroke to DONE -22% on full-100 (CLASSIC-HOTSPOTS follow-up) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1841
- incr: a \title keystroke goes on from the old run past \begin{document}'s hooks (CLASSIC-BEGINDOC) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1832
- perf(pdf /ID): hash the PDF while it is written; unroll the SHA-256 kernels (PDF-ID-HASH) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1840
- runtime: StatSig holds the status-change time (STATSIG-CTIME) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1842
- xetex fontmgr: family-name parity matrix against xelatex (UNICODE-FINISH 1) by @jay3332 in https://github.com/flash-tex/flashtex/pull/1815
New Contributors
- @AarushRaheja made their first contribution in #1388
Full Changelog: v0.1.9...v0.2.0