16 Commits
Author SHA1 Message Date
Steffen Becker a260969138 ci: a version tag publishes the built dist/ as a release archive
Serving the app then needs no Node toolchain: download the archive from the
release, unzip, point a web server at the folder it unpacks as. The notes come
from the changelog section for that version. The tag is held against
package.json first, whose version the build stamps into the app.
2026-09-12 00:51:08 +02:00
Steffen Becker b2dcfa3aaf chore: a sponsor button points at the project's PayPal link 2026-09-08 09:44:58 +02:00
Steffen Becker 6794533830 ci: LibreOffice builds formula objects, and node strips the TS import
libreoffice-writer alone has no Math component, so Writer dropped every formula
it imported — Word's own OMML included — and the fuzz leg saw the loss.
node 20 cannot import tests/schemaValidate.ts, which the monkey run does; 24
strips the types. node 20 is end of life anyway.
2026-09-06 20:11:55 +02:00
Steffen Becker d156482a3f test: LibreOffice, the layout lint and a monkey read the editor's work back
lo-fuzz.test.ts hands every fuzz seed to LibreOffice as .odt and .docx and
compares what comes back, listing the differences LibreOffice makes by design.
test:layout opens the corpus, the showcase and fuzz seeds in the browser, holds
the page count against LibreOffice and checks the lines for overlap, margin
escapes and stranded headings. test:monkey types at random on corpus documents
and asserts the schema, undo to the start, redo, and that both saved formats
read back. browser.mjs now carries the dev server and the settle helper.
2026-09-06 19:07:16 +02:00
Steffen Becker 6b6b621a5a test: the browser runs take their engine from BROWSER, and CI runs all three
openApp() launches chromium, firefox or webkit from playwright-core; the smoke
and DOM runs pass in each. CI runs both per engine, WebKit on macOS for
Safari's text shaping. build.target is set explicitly to the browsers the
bundle promises. CLAUDE.md is back under its 120-line budget.
2026-09-04 19:30:14 +02:00
Steffen Becker 1e88427154 test: semantic package lint, LO style resolution, cross-format rendering
Three legs against the closed-loop blind spot the duplicate-style bug
exposed: package-lint.test.ts checks invariants the schemas cannot
express (unique style ids/names, dangling style/num/rel references,
balanced ranges, manifest completeness); lo-roundtrip gains a
soffice→fodt leg asserting the styles LibreOffice resolves (Heading
chain Arial/bold/sizes, Word defaults); lo-render-consistency.test.ts
renders the kitchen sink from both formats through LibreOffice and
compares pagination and pixels (ratchet thresholds). CI's LO job
gains poppler-utils; test:lo runs both LO files.
2026-08-30 10:05:43 +00:00
Steffen Becker 742b1cc2b0 test: kitchen-sink fixture + schema validation of both exports
tests/kitchenSink.ts authors one deterministic document using every
feature; schema-validation.test.ts validates its .odt against the ODF 1.3
RelaxNG and its .docx parts (after MCE resolution, as Word reads them)
against the ECMA-376 transitional XSDs — the structural half of Word's
strict reader, which LibreOffice silently forgives. Schemas vendored under
tests/schemas/ (sources and offline patches in its README); self-skips
without xmllint, which CI now installs.
2026-08-26 15:42:31 +00:00
Steffen Becker fda166103f ci: 20-minute job timeouts
A hung apt mirror on the runner otherwise holds a job until the
6-hour default limit; every job normally finishes in minutes.
2026-08-18 22:30:37 +02:00
Steffen Becker 6bec446dfe ci: deploy to GitHub Pages on push to main 2026-08-17 18:59:48 +02:00
Steffen Becker 834ffda931 chore: CLA contact address, workflow URL follows the repo rename 2026-08-17 18:59:48 +02:00
Steffen Becker 9ce01fa32f ci: CLA signing check on pull requests
CLA Assistant Lite workflow: a PR stays red until its author signs
CLA.md by comment; signatures land on the cla-signatures branch.
2026-08-16 00:32:49 +02:00
Steffen Becker 6b64b42c42 ci: run the LibreOffice round-trip leg in its own job
The leg self-skips wherever soffice is absent, so until now it only ran
when someone remembered to locally. A parallel job installs
libreoffice-writer + fonts-liberation and runs npm run test:lo.
2026-08-15 21:59:31 +02:00
Steffen Becker 026f6b6d83 test: headless-Chromium smoke test for the UI layer
tests/smoke/run.mjs boots the production build in Playwright Chromium and
checks what jsdom cannot: the bundle boots, typing and the bold shortcut
reach ProseMirror, autosave survives a reload, a corpus ODT imports and
paginates; any uncaught page error fails the run. Wired as npm run
test:smoke and a CI job (build + chromium install), playwright-core is
now a devDependency.
2026-08-15 21:58:47 +02:00
Steffen Becker 64cc010f01 docs: a real-world document's name stays out of the repo
The parity findings named the six files the corpus is built from, so every
measurement carried a document title into the history. They move to a
gitignored FINDINGS.md beside the corpus itself; the README keeps the harness.

A test that needs a document builds one, so nothing under src/ or tests/
reads the gitignored corpus — CI greps for exactly that.
2026-08-11 22:25:33 +00:00
Steffen Becker 60980fa4d6 docs: load CLAUDE.md detail only where it is needed
The root file is read at every session start and had grown to 87 KB, so every
session paid for knowledge it did not use. Move the per-directory detail into
nested CLAUDE.md files, which load when a file in that directory is touched,
and the five deep-dive topics into docs/. The root keeps the commands, the hard
rules and an index of where the rest lives.

Content moved verbatim — the probed Word/LibreOffice behaviour, sentinel order
and shared constants are what the code cannot say. CI fails the root over 120
lines, since a prose budget alone is what let it grow.
2026-08-08 15:33:46 +02:00
Steffen Becker 96c5d87abd test: add CI 2026-06-24 23:10:58 +02:00