Repository navigation
Site shell: design tokens, dark mode, ALCops header, sticky matrix, favicon, Open Graph, the docs map, count tests and the grid keyboard route (#138, #124, #113) - #147
Merged
Conversation
…heet (#137) Scratch branch of the WP16 spike, never merged. Tokens under :root, [data-theme=dark] and the prefers-color-scheme block; header with the inline ALCops logo, Rulebook and the owner slug, labelled stage and level navigation, Set up, Help, theme toggle, cart badge and a menu below 768 px (js/shell.js); the landing page at / with cards, facts and the three-step path; the matrix in a scroll container with a sticky header row and rule column; the action as a chip in each cell; footer with the publish facts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…concept (#138) Get-RulebookDocsMap writes docs after alProjectDocsUrl: home (https://alcops.dev), dashboard, levels, overrides, quarantine, twins (pte-or-appsource.md), changingARule and alProject, built through Get-RulebookDocsUrl on the engine ref like docsUrl, which stays and equals docs.dashboard (alProjectDocsUrl equals docs.alProject). The writer puts the map one link per line. Fixture regenerated; the key order of the Publish suite and the cart node test follow. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ooter from the data file, one Tab stop per grid (#138, #113) The landing layout of the spike leaves / (D54 holds until #139): index.html, content/_index.md and the stage switcher are main's again, the landing rules leave site.css and main carries page-matrix. Every page gets its description from the content adapter (stage and level descriptions, a fixed sentence otherwise) for the meta description and the og: tags, a lead under its title, favicon.svg and a 180 px favicon.png (static/), and the footer links docs.home. A grid is role=grid with one cell at tabindex 0; matrix.js moves it with the arrow keys, Home, End, Ctrl+Home and Ctrl+End, and keeps it on a shown row after filtering. Site tests: the shell markup, the head tags, the footer, the Tab stop and equal dark token blocks; the stub, the CI job and the Publish suite count js/shell.js and the favicons; the Deploy literal test skips the PNG. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…nd the site page count (#124) Rulebook.Template.Tests.ps1 counts template/ (without the site build output) and checks the numbers of docs/reference/template-content.md, README.md and CONTRIBUTING.md, now 96 files with 30 in site/, and pins stages + levels + rules + 2 = 39 on the site data fixture. The regeneration test and two docs say 14 hand-written files, as the list has. The issueState output names closed-duplicate and closed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on one line on a phone (#113, #138) With JavaScript the rule links of the row headers leave the tab order and become the first column of the arrow-key route, so a stage page is one Tab stop for its grid; Home goes to the row link. Below 768 px the endpoint table of the setup page scrolls inside itself instead of breaking each URL. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…the release note (#138) docs/dashboard.md: section 3 says the shell is built, section 4 has the layout with shell.js, the partials and static/, and a new part on the shell (head, colour scheme, tokens, header, main, matrix, keyboard route, footer, mobile); section 5 has the docs key. template/docs/dashboard.md: what every page shows, dark mode and the keys in section 1, the tokens an organization changes in section 5, the docs key in section 6. CONTRIBUTING: how to render favicon.png again. RELEASENOTES: the beta.8 line. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…nu, has-js from the head, anchors and print (#138) shell.js measures the sticky header into --header-h (ResizeObserver, resize fallback; the open menu is left out) and repeats the jump to an anchor once it is known; html gets scroll-padding-top from it and the matrix container a left scroll padding for the sticky rule column. The theme toggle, the cart and the menu button move out of #site-nav into div.header-tools, so the cart count stays in view below 768 px; the brand gives way with an ellipsis on the organization. The inline head script sets has-js, so the menu folds from the first paint; without JavaScript the header does not stick on a phone. The open menu scrolls within the screen. matrix.js leaves Shift, Ctrl+Arrow and the other modifiers to the browser and closes an open popover when the focus moves. Print uses the light tokens (compared with :root by the token test); the SVG favicon link says sizes="any". The docs follow. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Oct 28, 2026
Closed
Closed
…px, dvh and the anchor padding without JavaScript (#138) The header's min-height is the literal 3rem, not the measured --header-h, so a wrapped header shrinks back when the window widens. shell.js skips the measurement only while the menu is open below 768 px, and closes an open menu (aria-expanded false) when the window grows past 768 px. The open menu's height limit has a 100dvh value after the 100vh fallback; without JavaScript on a phone the header does not stick, so html keeps only 0.5rem of scroll padding. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #138
Closes #124
Closes #113
The design system and app shell of the dashboard site on own CSS (D59), the engine side of the
docsmap (D58), the template count test and the roving tabindex of the grid./stays the matrix of the first stage (D54 holds until #139). Screenshots and the look check: #138 (comment)The shell
site.cssholds the light tokens under:root, the dark ones under[data-theme="dark"], and the same dark set again in aprefers-color-schemeblock (a Site test checks the two dark blocks are equal line for line). Print uses the light set. An inline script first in<head>setshas-jsand applieslocalStorage['rulebook-theme']before the first paint. The toggle injs/shell.jssets the choice and goes back to the system setting on the second click. Dark mode follows the system without JavaScript.partials/logo.html,currentColor), "Rulebook", the owner ofrepositoryasspan.brand-org, the stage and level links labelled "Stage" and "Level", Set up, and Help (docsUrl; G repoints it).div.header-toolsholds the theme toggle, the cart with its count and the menu button, and stays beside the brand below 768 px.shell.jsmeasures the header into--header-h.div.matrix-scrollwith a sticky header row and rule column, each action as aspan.chip, and everydata-*kept.role="grid"is on the table and there is one Tab stop per grid (Site: a roving tabindex for the matrix grid #113).meta description,og:title,og:description,og:type,og:urlandog:site_name. The description comes from the content adapter (_content.gotmpl,_index.md).favicon.svgand a 180 pxfavicon.pngsit instatic/. There is no generator tag.<main class="page page-<kind>">has ap.leadafter each<h1>.generatedAt,engineRef, the organization repository, therulebook.jsonlink and "Powered by ALCops" linkingdocs.home. Assets are at fixed paths:css/site.css,js/shell.js,js/matrix.js,js/cart.mjs,js/cart-core.mjs.The
docsmapGet-RulebookDocsMap -RefinRulebook.Site.psm1writesdocsafteralProjectDocsUrl, one link per line ($script:MultiLineKeys). The keys arehome(https://alcops.dev),dashboard,levels,overrides,quarantine,twins(pte-or-appsource.md),changingARuleandalProject, all built throughGet-RulebookDocsUrl.docsUrlandalProjectDocsUrlare unchanged and equaldocs.dashboardanddocs.alProject(asserted). The fixture is regenerated, and the key order is asserted in the Site and Publish suites. Contract:docs/dashboard.mdsection 5 andtemplate/docs/dashboard.mdsection 6.#124
template/(without the site build output) againstdocs/reference/template-content.md,README.mdandCONTRIBUTING.md. These now say 96 files, 64 by hand, 30 insite/and 32 generated.stages + levels + rules + 2, at 39 on the fixture.issueStatelistsclosed-duplicateandclosed.Dropped from the spike
The landing page of
wp16/spike-own-css(head 8babfc2, kept on origin for #139) is not in this PR:layouts/index.html;content/_index.md;stages/<first>/;data-rulebook-landingon<main>;site.css(hero, landing grid, prose, facts panel, stats, steps, cards, button).The setup page's
id="levels"from the spike stays.Deviations
.png, because the favicon's bytes matched\bv1\b.descriptionkey of the content adapter'sAddPagecall (read as.Description, checked with Hugo 0.165).favicon.pngis a committed binary from a one-off Playwright render. The steps are in CONTRIBUTING; there is no build step.https://github.com/<repository>, as the cart's empty-form link already does (GHES is unsupported, an existing limit).localStorage['rulebook-theme']is shared by every project site of onegithub.iohost, like the cart key (documented).Contrast (WCAG, from the tokens of
site.css)Tests
Pester (local, Hugo 0.165 extended, the real-Hugo Site case ran):
Rulebook.SiteRulebook.DeployPublish.ActionRulebook.TemplateRulebook.PublishDocsNo failures and no skips.
node --test tests/site/*.test.mjs: 21 passed.Playwright (throwaway, in a scratch folder, fixture build): 36 of 36 checks passed.
--header-h.🤖 Generated with Claude Code