Skip to content

Site: playground, wide-desktop layout, simplified contribution guide - #18

Merged
phucnht merged 6 commits into
mainfrom
develop
Aug 19, 2026
Merged

Site: playground, wide-desktop layout, simplified contribution guide#18
phucnht merged 6 commits into
mainfrom
develop

Conversation

@phucnht

@phucnht phucnht commented Aug 19, 2026

Copy link
Copy Markdown
Owner

Website and documentation only. Nothing here is in the CTAN archive: CONTRIBUTING.md is not shipped and the playground is website-only, so this cannot affect the 0.3.0 submission.

Held back until the release was settled. Both merged cleanly onto the current develop, and the full suite is green at 22 cases including the new playground case and the rewritten versions sweep.

Starlight pins the header and the sidebar to the viewport with
position: fixed and inset-inline-start: 0, and hands the table of
contents container half of whatever width is left over. The table of
contents is left aligned inside it, so on a wide monitor all that growth
became empty gutter on the right while the sidebar still hugged the far
left edge.

The design widths total about 90rem, so past that the shell now stops and
centres. A max-width cannot do this, because a fixed element resolves
against the viewport and ignores an ancestor's width, so the gutter is
computed once as a custom property and applied to each pinned element.
The token sits with the other structural properties rather than in a
theme block, since layout must not depend on the colour scheme.

Also removes the second caret on the theme and language pickers. Starlight
already draws one as a sibling of the select, and opting into
appearance: base-select made the browser draw ::picker-icon on top of it.
The browser's is hidden and the rotate-on-open feedback moves to
Starlight's icon, which matches the glyphs beside it.
A visitor can now write Texchanges markup and watch the same source
render as a review, as the final document, and as the original, without
installing anything.

The preview is drawn in JavaScript rather than by a TeX engine. A
WebAssembly engine is possible but costs several megabytes plus
on-demand CTAN fetches and a package server, which is a heavy standing
cost for a documentation site; the package's pitch, one source rendering
three ways, needs no compiler to show.

That makes the renderer a second implementation of behaviour
texchanges.sty defines, which is the real risk here, so it is held to
the same expectations as the compiled output: a new playground case runs
it over tests/review.tex and tests/features.tex and asserts the tokens
each mode must and must not contain. Restoring a wrong rule makes it
fail, so the guard is not vacuous. The mode and status table is
transcribed from \tx_render:nn rather than assumed, including the
detail that review mode shows accepted and rejected changes as settled
prose and only marks up pending ones.

Open in Overleaf carries the package with the snippet. Overleaf rebuilds
its TeX Live once a year and Texchanges reached CTAN after the last
freeze, so \usepackage{texchanges} alone would fail there. The snippet
writes the package out with filecontents*, which needs nothing from
Overleaf beyond a standard kernel. Verified by compiling the generated
payload under -jobname=output in a directory with no texchanges.sty and
no TEXINPUTS. The copy under website/public is made at build time and
gitignored so it cannot drift.

The layout splits on a container query rather than a viewport query,
because the column around the component can still be narrow when the
window is wide.
I wrote that Overleaf could not have Texchanges because CTAN received it
after the yearly TeX Live freeze. That is wrong. TeX Live's network
distribution tracks CTAN continuously, and TeX Live 2026 ships
texchanges 0.2.4, verified by reading the package out of tlnet.

Bundling is still right, for a different reason: the installed version
is whatever CTAN held when the distribution was built, which is not the
version the site documents. Sending the package along keeps the
playground and the compiled result in agreement, and a project-local
file takes precedence over the installed one.
The guide was written by copying typst's posture, including its outright
ban on AI-implemented contributions. That posture suits a large project
whose maintainers are flooded with drive-by pull requests. It does not
suit a package maintained by one person that would like more help than
it gets.

The LaTeX projects this package sits beside write plainly and without
any AI policy at all: latex3/latex3 is 46 lines and opens by thanking
the reader for considering a contribution. This follows that register,
keeping the parts that carry weight and dropping the parts that read as
conditions a submission is graded against.

The compatibility rules stay, because they are load-bearing: the five
public commands are in released documents, the \txreplace argument order
is fixed, the short aliases must not overwrite another package's
command, and compiled output does not belong in the repository.

The AI section now asks for the thing that can actually be checked. A
contributor should understand the change, be able to say why it is
right, and write the pull request description themselves. No detector
for AI-written code exists, so a ban would have been an honour system
whose only real enforcement was a contributor failing to defend their
own patch, which review catches anyway.

The pull request template said the same thing inside an HTML comment, so
it never rendered; it now matches.
Simplify the contribution guide and drop the AI ban
Live playground, wide-desktop layout, single caret
@phucnht
phucnht merged commit f985ea5 into main Aug 19, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant