Skip to content

docs: take the page order from MediaWiki:Sidebar - #487

Merged
lens0021 merged 3 commits into
mainfrom
claude/sequence-from-sidebar
Aug 20, 2026
Merged

docs: take the page order from MediaWiki:Sidebar#487
lens0021 merged 3 commits into
mainfrom
claude/sequence-from-sidebar

Conversation

@lens0021

Copy link
Copy Markdown
Collaborator

Closes #455.

The duplication

The order of the documentation was written down twice: as MediaWiki:Sidebar, and again as the arguments of the {{prevnext}} at the foot of each of twenty-one pages. Nothing checked that the two agreed, and twice they did not — a page reached the sidebar with no call naming it, and the last page of the chain had no row at all, because a lone argument read as the next step and no positional form could spell "nothing after this".

They agree today, as it happens: twenty sidebar entries, and the chain covers all twenty in the sidebar's order with index at the head. That is the state to keep, not a state to rely on — both past divergences were repaired by hand, and the shape that produced them was untouched.

The change

Module:Sequence reads the sidebar, so {{prevnext}} takes no arguments. Adding a page is now two edits instead of three, and the third was the invisible one.

The direction is forced, as #455 worked out: MediaWiki:Sidebar is read line by line by the skin rather than parsed as wikitext, so it can call nothing; but it is an ordinary page, so anything can read it.

What the sidebar contributes is order alone. Labels stay in Template:prevnext/label, which reads each target's own translated title — so none of this reaches the translations. A prevnext sits outside the <translate> tags, and no ko.wikitext changed in this branch.

The two decisions #455 left open

  • The group boundary. The sequence keeps crossing from the docs group into the references group, as it does today. A reader who reaches the end of the first group is better sent on than stopped.
  • index. It heads the sequence without being a sidebar entry, so the module prepends it. The alternative — a sidebar entry for it — would duplicate what every skin's logo already points at, which is why the sidebar's own comment says it has none.

The condition #455 set

check first that it runs in the image: Scribunto needs either the LuaSandbox PHP extension or a standalone lua binary, and neither is obviously present in the Alpine-based image. If it is missing, this proposal costs a Dockerfile change, and that changes the trade.

It runs. The base image does pecl install LuaSandbox-4.1.2, and this site has rendered Module:Example since #473. No Dockerfile change, which is what tips this over the alternative — #455's cheaper option was a check that asserts the two copies agree, and a check that watches a duplication is worth less than not having the duplication, once the module is free.

What holds it

smoke gets what the old shape got wrong, stated as three assertions: every page the sidebar names has a navigation row, index has no previous link, and Licenses has no next. The existing check that Searching/ko's row carries Translating's Korean title still stands and now also proves the module renders at all.

Draft because the module cannot be run here — no Docker on this machine, so the first real execution is CI's bake.


Generated by Claude Code

The order of the documentation was written down twice: as MediaWiki:Sidebar,
and again as the arguments of the {{prevnext}} at the foot of each of
twenty-one pages. Nothing checked that the two agreed, and twice they did
not -- a page reached the sidebar with no call naming it, and the last page
of the chain had no row at all, because a lone argument read as the next
step and there was no way to spell "nothing after this".

Module:Sequence reads the sidebar, so {{prevnext}} takes no arguments. The
direction is forced: MediaWiki:Sidebar is read line by line by the skin
rather than parsed as wikitext, so it can call nothing; but it is an
ordinary page, so anything can read it.

What the sidebar contributes is order alone. Labels stay in
Template:prevnext/label, which reads each target's own translated title, so
none of this reaches the translations -- a prevnext sits outside the
translate tags and no ko file changed.

The two decisions #455 left open: the sequence keeps crossing from the docs
group into the references group, because a reader at the end of the first
group is better sent on than stopped; and index heads it without being a
sidebar entry, so the module prepends it rather than the sidebar gaining a
duplicate of what every skin's logo already points at.

#455 also made this conditional on Scribunto running in the image, which
was not known when it was filed. It does: the base image installs
LuaSandbox 4.1.2 and this site has rendered a Lua module since #473. No
Dockerfile change.

smoke asserts what went wrong before: every page the sidebar names has a
navigation row, index has no previous link, and Licenses has no next.
…e class

The main page is where a reader arrives rather than a step they walk, and it
already names its own way on in its opening lines -- Why wikitext,
Installation and Getting Started are all linked there. So it leaves the
sequence entirely: the module no longer prepends it and index.wikitext no
longer calls prevnext. Why wikitext heads the sequence, which is what the
sidebar says.

That also drops a name the module had hardcoded, which was a small second
copy of something written down elsewhere -- the thing this branch exists to
remove.

The smoke check that caught this was itself wrong, and its own failure is
what showed it:

    ##[error]index heads the sequence and should have no previous link

index had no previous link. TemplateStyles inlines prevnext/styles.css into
every page carrying a row, so `.wikven-prevnext-prev` appears in the page's
own stylesheet whether or not the div was rendered. Matched on
class="wikven-prevnext-prev" now, which is the div.
… title

The row rendered empty on every page:

    ##[error]Searching/ko's prevnext does not show Translating's Korean title (번역)
    <div class="wikven-prevnext"></div>

rootText only strips a subpage where the namespace has subpages turned on,
and this one does not -- nothing sets $wgNamespacesWithSubpages, so
"Searching/ko" is one whole title and matched nothing in a list of source
page names.

Matched as a prefix of the sidebar's own names instead, so it works either
way and does not depend on a setting this repository never made. No sidebar
entry is another entry plus a slash, which is what makes the prefix safe.

The module now fails loudly when the sidebar yields no entries, rather than
returning nothing. An empty row is the invisible failure -- the wrapper div
is still there and the page still looks finished -- and it is the failure
this module exists to end.

Two of the three checks added with it were the same kind of quiet: they
matched the wrapper class, which prevnext always emits, so an empty row
passed. They match the link div now. Only the Korean-label check, which was
already there, caught this.

Also renames the module to Module:Sequence.lua, so its file says what it is
to an editor. Special:MyLanguage/Lua modules documents that naming without
recommending it, and this is the site that gets to try it.
@github-actions
github-actions Bot temporarily deployed to preview August 20, 2026 15:18 Destroyed
@lens0021
lens0021 marked this pull request as ready for review August 20, 2026 16:05
@lens0021
lens0021 merged commit 04ffa17 into main Aug 20, 2026
23 checks passed
@lens0021
lens0021 deleted the claude/sequence-from-sidebar branch August 20, 2026 16:06
lens0021 added a commit that referenced this pull request Aug 21, 2026
`MediaWiki:Sidebar` is the reading order as well as the menu —
`Module:Sequence` reads it to build the prev/next row on every page
(#487) — so its order is the order the documentation is read in, and it
had never been chosen as one. It was the order the pages happened to be
written in.

## The order

**Docs** — Installation, Getting Started, Pages, Images, Skins,
Searching, Extensions, Lua modules, JavaScript, Translating, Editing
sidebar, Deploying, Troubleshooting

**References** — Limitations, Why wikitext, Configuration, Standalone
binary, Commands, Writing an extension, Development, Licenses

Docs is one walk: get the tool, build something, author it, shape the
site, extend it, translate it, publish it, fix it.

## What moved, and why

**Why wikitext led the whole thing.** It argues wikitext against
Markdown, which is a question a reader has before installing anything
rather than a step they walk — and the front page now makes that
argument itself, citing `Why wikitext` and `Limitations` together as its
two read-more links. Both are appendices to the landing page, so both
are in References, and they stay a pair.

**Searching moves up beside Skins.** It needs a skin to mount its
typeahead, and both `Extensions` and `Skins` pointed forward to it from
above; those two references now point backwards.

**Editing sidebar moves below Skins and Translating.** Two of its three
sections presume translation — the labels are messages, so the Korean
wording is a `/ko` file — and its logo and Minerva claims presume
`Skins`. At fifth place it asked a reader who had just built a Hello
World to write a Korean message file for a site with no translations,
and to link pages they did not have.

**Deploying ends the walk, Troubleshooting follows it**, where a walk
stops and lookup begins.

**References opens with the two short pages the landing page hangs off
it.** They are also the ramp: `Troubleshooting` into `Configuration` is
78 lines into 225, and the three reference pages after it run to 557
without a break. `Configuration` leads those three, being the page the
rest of the documentation links most — 17 of the other 20 pages link it.

**Standalone binary keeps its place before Commands.** `Commands`'
examples are a bare `wikven build`, and it is `Standalone binary` that
puts `wikven` on the `PATH`.

**Writing an extension now precedes Development.** `Development` sends
readers to it in its opening lines, and is itself linked from nowhere
else in the documentation.

## The CI change

Two smoke assertions named pages that only the old order made true: that
`Why wikitext` has no previous link, because it was first, and that
`Searching`'s next is `Translating`.

The ends-of-sequence assertion goes altogether. That the first page has
no previous link and the last no next one is a detail of what
`Template:prevnext` renders, and reading it back out of the built HTML
is more of the docs' own furniture than a smoke check should be
inspecting. What it was added for (#455) is the row being missing
entirely, and the check above it already covers that — for every page
the sidebar names, rather than for two of them.

The translated-label check stays, and now reads which page follows
`Searching` from `MediaWiki:Sidebar`, the same place `Module:Sequence`
reads it. It is about the label — that a link on a translated page
carries the target's own translated title rather than a copy restated in
the caller — so the pair it happens to use should follow the order
rather than fix it.

## Checked

The sidebar diff is a pure reorder — the sorted entry sets before and
after are identical, so nothing was added, dropped or duplicated. All 21
targets keep their `Special:MyLanguage/` prefix, without which
`Module:Sequence` drops them from the chain silently and `Licenses` is
eaten by the core `licenses` message. Every label message and target
page exists; no entry is another entry plus a slash, so `positionOf`'s
prefix match is still unambiguous. The file carries no translate units
and there is no per-language sidebar, so nothing goes stale.

## Not done here

Three content defects the review turned up, all of them equally true on
`main` and none fixed by reordering:

- `Troubleshooting`'s "Two configuration files, one of them ignored"
says the first in precedence order wins, without naming the order or
linking `Configuration` — and tells the reader to delete the others.
- `Writing an extension` puts `WikvenRepositories` at the top level, a
sibling of `config:`; `Configuration` nests it under `config:`, and a
top-level key is exactly what `Troubleshooting` says warns and is
ignored. The same page writes `.wikven.yml` where every other page
writes `.wikven.yaml`.
- `Editing sidebar` has no inbound prose link from any page — the
sidebar is its only route in, which its move to eleventh makes slightly
more so.

---------

Co-authored-by: Claude <noreply@anthropic.com>
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.

docs: take the page order from MediaWiki:Sidebar instead of restating it in every prevnext

2 participants