Skip to content

release: texforge 0.9.0 - #25

Merged
JheisonMB merged 11 commits into
mainfrom
develop
Aug 26, 2026
Merged

release: texforge 0.9.0#25
JheisonMB merged 11 commits into
mainfrom
develop

Conversation

@JheisonMB

Copy link
Copy Markdown
Collaborator

Six specs from the backlog, plus three fixes that only appeared once the result was installed and used on real documents.

The headline: the spell checker stops inventing errors

texforge check was reporting hundreds of words that are not words — violaci, patr, acil. The checker reads the .tex before LaTeX resolves it and split every word at its accent macro, so violaci\'on became violaci + on and neither is in any dictionary. On a real thesis document that was 154 of 200 warnings.

Accent macros are now resolved to the character they produce before words are split, covering both families — the symbol forms (\', \`, \^, \", \~) and the letter-named ones (\c, \v, \u, \H, \r, \k), which the tokenizer stores differently and which a first attempt missed entirely.

Then using it found the remaining case: impor\-tancia still split, because \- is a discretionary hyphen rather than an accent. \- and \/ are now transparent — they render no character, and they do not break the word either.

before   200 warnings, 154 of them fragments
after     51 warnings, 0 fragments, 0 errors

The 51 that remain are genuinely unknown: dataset, softmax, Kepler, Robovetter, Spanish technical terms.

The page map now reads the PDF instead of guessing

pdf pages reports which section opens each page, and it built that by matching heading text against the table of contents — a mechanism that had needed six fixes in three days. The PDF states the answer outright: its outline carries the section number in the destination name (subsection.2.4), so nothing has to be inferred from a title. The text-matching path stays as the fallback for documents that emit no bookmarks, and the output says which path produced the map.

Using it found that the new path attributed each page to the last section that opened it instead of the first, contradicting the rule the old one had followed since 4947308. Checked against the document's own table of contents: page 2 opens sections 1 through 2.3, and the answer is 1. Four of five multi-section pages were wrong. A test written alongside the new code asserted the wrong behaviour — it described what the code did rather than what the command promises — and was corrected against the measured ground truth.

The rest

  • Templates refresh. A downloaded template was cached forever behind a version field nobody read. There is now a TTL, a refresh that falls back to the cache when the network is unavailable, and texforge template refresh for when you know it changed.
  • texforge uninstall. Plan first, ask, itemised with sizes. The personal spell dictionary is treated as the user's own writing and preserved unless --include-spell-words is passed.
  • The installer gives the skills wizard a terminal. Under curl … | sh the child inherited the pipe and skipped past its own prompt. It now gets /dev/tty, and where there is no terminal — CI, a container without -t — it skips the skill cleanly instead of breaking the install.
  • A clippy fix for Rust 1.98's new chunks_exact_to_as_chunks lint in pre-existing rasterization code, unrelated to any spec but fatal to a -D warnings gate.

Gate green: cargo fmt --all, cargo clippy --all-targets -- -D warnings, 732 tests. Verified end to end against a real thesis document and the committed capabilities PDF.

@JheisonMB JheisonMB added the target:main Targets the main branch label Aug 26, 2026
@JheisonMB
JheisonMB merged commit 0b07899 into main Aug 26, 2026
4 checks passed
@JheisonMB
JheisonMB deployed to production August 26, 2026 20:19 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

target:main Targets the main branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant