Commit Graph
20 Commits
Author SHA1 Message Date
Abdessamad Derraz 2098b7a955 fix: judge a redirect page by its target 2026-10-23 02:30:20 +02:00
Abdessamad Derraz d94347ba18 fix: quiet theme chrome, link-coloured focus 2026-10-23 02:25:30 +02:00
Abdessamad Derraz 123d698e43 feat: build the site with Astro Starlight
generate_site.py writes the Starlight project in website/ and nothing
else: mkdocs.yml, the MkDocs hooks, theme overrides and stylesheet go,
and the wiki is written in Starlight's syntax. Both workflows set up
Node with the official actions/setup-node pinned by commit, run npm ci
from the committed lockfile, build with the strict link validator and
check the result with validate_site.py.

The search weighs a page by what it answers: Start here pages first,
a system page's cards and file names before a guide citing them, deep
guides, launchers, aliases and frozen copies after. Status badges,
hash blocks and the export change lists leave the index. The ranking
sits at the centre of a range where the 13 queries of search_gate.py
all answer, in the search box itself.

839 pages, every URL and 45,611 ids match the MkDocs build. The tests
read the Starlight content and syntax.
2026-10-22 18:47:22 +02:00
Abdessamad Derraz be5be996db feat: hold the site to page and index budgets
validate_site.py fails a page over 1 MB of HTML, a search index over
8.5 MB (1.7 MB gzip), a skipped heading level, a table header without
text, a script from another host and a diagram drawn at runtime. The
limits sit above what the site now measures (0.88 MB, 7.2 MB, 1.43 MB),
each with its reason, and each has a test.
2026-10-22 13:13:55 +02:00
Abdessamad Derraz 7a120d7a51 fix: generate the site before CI runs the suite
docs/ is gitignored and was built after the tests, so the three guards
that read rendered pages skipped on every CI run. The site is generated
first, the suite runs whatever that step returns, and the guards fail
in CI when the pages are absent.
2026-10-21 09:59:22 +02:00
Abdessamad Derraz 721622c2ea fix: keep bold labels in nested profile blocks
The nested list structure stays, so each label renders bold instead of showing its asterisks. The platform details block becomes a list as well: its labels were paragraphs followed by items with no blank line between them. validate_site now reports any asterisks that reach a rendered page outside code, which runs in the deploy and in pipeline step 8b.
2026-10-20 12:46:37 +02:00
Abdessamad Derraz 77c4857a46 fix: a site preview writes its own config
generate_site --docs-dir sent the pages elsewhere but always rewrote the tracked mkdocs.yml, outside the lock taken on that folder, with the navigation of the work in progress. Two previews into two folders both wrote it. Another folder now gets <name>.mkdocs.yml beside it, docs_dir set and its paths rebased, which mkdocs builds with -f.
2026-10-20 04:30:03 +02:00
Abdessamad Derraz b402a8b917 docs: install markdown with the test dependencies
CONTRIBUTING and the testing guide installed pyyaml and jsonschema only, while the CI test job also installs markdown. On a contributor's machine the wiki heading test skipped and the run read OK. Both name it now, and a test compares them to the packages the tests import.
2026-10-20 02:24:36 +02:00
Abdessamad Derraz 4231902a6c docs: write prose without dashes or semicolons
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.

validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.
2026-10-19 06:47:31 +02:00
Abdessamad Derraz 583031eda5 refactor: plain documentation theme for the site
No gradient banner, no coloured stripes or dots beside cards, no lifting cards, pill badges or small-caps headers. File blocks are separated by a rule, tables keep the theme's own size, and headings no longer repeat the site name the header bar already shows. Classes nothing emits were removed.
2026-10-19 05:34:52 +02:00
Abdessamad Derraz bfc7101166 fix: print the declared CRC32 on platform pages 2026-10-18 17:19:58 +02:00
Abdessamad Derraz d5dd16dbdb fix: give the home page a descriptive title 2026-10-18 17:19:25 +02:00
Abdessamad Derraz e56621de42 fix: announce the sitemap from each page 2026-10-18 17:19:09 +02:00
Abdessamad Derraz 19f02312ce docs: map every test module and the check 2026-10-18 16:22:54 +02:00
Abdessamad Derraz 211ce0bf16 chore: install every test dependency in CI 2026-10-18 14:58:44 +02:00
Abdessamad Derraz 99b049fa96 fix: catch indented hashes in wiki sources 2026-10-16 16:58:43 +02:00
Abdessamad Derraz 20937e688b fix: print platform detail lists as plain text 2026-10-04 22:04:01 +02:00
Abdessamad Derraz 14975ce5da fix: keep an issue number from opening a heading 2026-10-04 20:02:34 +02:00
Abdessamad Derraz 9ea6083b8a fix: show path placeholders and hash lists on site pages 2026-10-04 18:07:18 +02:00
Abdessamad Derraz 5d417c8229 feat: add data contract validation
JSON Schemas for the database, install and pack manifests, target
manifests, site API envelopes and stats, plus the semantic invariants a
schema cannot express: declared totals matching their lists, no
destination both installed and omitted, database keys matching their
sha1. validate_site.py checks the rendered HTML for metadata, headings,
image alternatives, duplicate ids and unresolved local links.

Pack manifests are read from inside the generated archives, where
generate_pack writes them, rather than from a dist/ glob that matches
nothing.

Emulator and platform schemas gain additionalProperties: false, and
cores[] plus contents[].name must be strings: an unquoted 81 or 01 in
YAML parses as a number and stops matching the upstream name.
2026-08-10 13:35:33 +02:00