Merge main: the formatting bar, fonts and export
Three conflicts, all of them two additions to one place: handlers.go — showPage grew the palette's fields on this branch and the toolbar's, the font faces' and the export links' on the other. Both kept, in both the struct and its construction. AGENTS.md — two rules were appended after the same paragraph of the tools-that-answer-wrongly section: "a new test must be seen to fail" and "do not pass on somebody else's finding as your own verification". They were written a few hours apart by the same session for different reasons, and both belong. The bundles are rebuilt on top of the merge, both of them. What needed verifying is not that it merged. views/show.html now carries the formatting bar and the jump-to palette for the first time, and they are separate bundles reaching for the same keyboard on the same page — so both drives were run against the merged tree rather than either side of it: the committed browser drive at 22/22 (including the three keyboard checks, which are exactly where a second bundle could have trodden on the first) and the palette's own 17/17, Control-K still opening from inside a document that now has a toolbar above it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYB9fUAfxXNzkeC3fsFYzR
49 files changed,
+6780
−141
AGENTS.md+52 −0core/src/abi.rs+48 −1core/src/fragment.rs+204 −10core/src/lib.rs+16 −3core/tests/fragment.rs+148 −2docs/superpowers/plans/2026-08-31-formatting-and-export.md+253 −0fixtures/browser-drive.mjs+590 −0fixtures/editor-entry.js+71 −14fixtures/generate-fragment.mjs+22 −1fixtures/toolbar-roving.mjs+86 −0fixtures/toolbar.mjs+273 −0fixtures/vectors/fragment/styled.binbinaryinternal/core/core.go+70 −88internal/core/testdata/docs_core.wasmbinaryinternal/docs/app.go+10 −0internal/docs/assets.go+39 −0internal/docs/export.go+283 −0internal/docs/export_test.go+336 −0internal/docs/handlers.go+20 −0internal/docs/render.go+44 −0internal/docs/static/editor.2acdd85ce9619546.js+0 −14internal/docs/static/editor.3e44c12d757809a4.js+14 −0internal/docs/store.go+23 −0internal/docs/views/show.html+238 −8internal/export/document.go+127 −0internal/export/markdown.go+290 −0internal/export/markdown_test.go+217 −0internal/export/pdf.go+723 −0internal/export/pdf_test.go+365 −0internal/export/pdfread_test.go+270 −0internal/export/sample_pdf_test.go+71 −0internal/fonts/files/LICENSE-OFL-1.1.txt+91 −0internal/fonts/files/LiberationMono-Bold.ttfbinaryinternal/fonts/files/LiberationMono-BoldItalic.ttfbinaryinternal/fonts/files/LiberationMono-Italic.ttfbinaryinternal/fonts/files/LiberationMono-Regular.ttfbinaryinternal/fonts/files/LiberationSans-Bold.ttfbinaryinternal/fonts/files/LiberationSans-BoldItalic.ttfbinaryinternal/fonts/files/LiberationSans-Italic.ttfbinaryinternal/fonts/files/LiberationSans-Regular.ttfbinaryinternal/fonts/files/LiberationSerif-Bold.ttfbinaryinternal/fonts/files/LiberationSerif-BoldItalic.ttfbinaryinternal/fonts/files/LiberationSerif-Italic.ttfbinaryinternal/fonts/files/LiberationSerif-Regular.ttfbinaryinternal/fonts/fonts.go+268 −0internal/fonts/fonts_test.go+277 −0internal/fonts/truetype.go+689 −0internal/pdf/pdf.go+455 −0scripts/browser-drive.sh+97 −0
CI passed — run details
AGENTS.mdLoading diff…
core/src/abi.rsLoading diff…
core/src/fragment.rsLoading diff…
core/src/lib.rsLoading diff…
core/tests/fragment.rsLoading diff…
docs/superpowers/plans/2026-08-31-formatting-and-export.mdLoading diff…
fixtures/browser-drive.mjsLoading diff…
fixtures/editor-entry.jsLoading diff…
fixtures/generate-fragment.mjsLoading diff…
fixtures/toolbar-roving.mjsLoading diff…
fixtures/toolbar.mjsLoading diff…
fixtures/vectors/fragment/styled.binLoading diff…
internal/core/core.goLoading diff…
internal/core/testdata/docs_core.wasmLoading diff…
internal/docs/app.goLoading diff…
internal/docs/assets.goLoading diff…
internal/docs/export.goLoading diff…
internal/docs/export_test.goLoading diff…
internal/docs/handlers.goLoading diff…
internal/docs/render.goLoading diff…
internal/docs/static/editor.2acdd85ce9619546.jsLoading diff…
internal/docs/static/editor.3e44c12d757809a4.jsLoading diff…
internal/docs/store.goLoading diff…
internal/docs/views/show.htmlLoading diff…
internal/export/document.goLoading diff…
internal/export/markdown.goLoading diff…
internal/export/markdown_test.goLoading diff…
internal/export/pdf.goLoading diff…
internal/export/pdf_test.goLoading diff…
internal/export/pdfread_test.goLoading diff…
internal/export/sample_pdf_test.goLoading diff…
internal/fonts/files/LICENSE-OFL-1.1.txtLoading diff…
internal/fonts/files/LiberationMono-Bold.ttfLoading diff…
internal/fonts/files/LiberationMono-BoldItalic.ttfLoading diff…
internal/fonts/files/LiberationMono-Italic.ttfLoading diff…
internal/fonts/files/LiberationMono-Regular.ttfLoading diff…
internal/fonts/files/LiberationSans-Bold.ttfLoading diff…
internal/fonts/files/LiberationSans-BoldItalic.ttfLoading diff…
internal/fonts/files/LiberationSans-Italic.ttfLoading diff…
internal/fonts/files/LiberationSans-Regular.ttfLoading diff…
internal/fonts/files/LiberationSerif-Bold.ttfLoading diff…
internal/fonts/files/LiberationSerif-BoldItalic.ttfLoading diff…
internal/fonts/files/LiberationSerif-Italic.ttfLoading diff…
internal/fonts/files/LiberationSerif-Regular.ttfLoading diff…
internal/fonts/fonts.goLoading diff…
internal/fonts/fonts_test.goLoading diff…
internal/fonts/truetype.goLoading diff…
internal/pdf/pdf.goLoading diff…
scripts/browser-drive.shLoading diff…