Skip to content

MIP-0044 tasks

Ordered delivery of MIP-0044 as stacked PRs (.claude/skills/mip-tasks/SKILL.md, scripts/stack.sh). Branch mip-0044/<k>-<slug>, each based on the previous; merge bottom-up, scripts/stack.sh restack after each squash-merge.

This round is the menu and the generator, nothing else. The table holds only what is scheduled, because just tasks-to-issues files every row it finds; the sections that come after are listed under "Later" and stay unfiled until someone schedules them.

# slug delivers tests (must exist before the PR) depends on
1 nav-menu §5.7. In index.html and about.html: nav.sitenav gains button#menu-toggle (aria-controls="menu", aria-expanded, a 16 px inline SVG plus the word) and div#menu holding ul.menu-links (the six interim items, <span aria-disabled="true"> for the four without a page) and div.menu-prefs with #sound and #chat-toggle moved in, ids unchanged. .controls keeps four: area, day, near me, list. site/static/ui.js gains the menu (disclosure: aria-expanded + .open, Escape, click outside, focus back to the button, no trap) and about.html loads it. style.css: inline row above 640 px, a 44 px strip and a panel at 640 px and below, z-index 1100 above the sheets (1000) and chat (1010), the floating .chat-toggle pill removed; about 32 lines. site.yml required files gain about.html and ui.js if the story has not added them scripts/site_check.js: ui.js runs before app.js in the sandbox, for both pages; the nav regexes accept attributes on <a>; exactly four <span aria-disabled="true">; .controls has exactly four children; #menu-toggle has aria-controls="menu"; a click opens it, Escape closes it and focus returns to #menu-toggle; the menu-links block of index.html equals about.html's; style.css is under 15,000 bytes. node --check on ui.js and app.js. Screenshots at 390 px and 1280 px, menu open and closed –
2 site-pages §5.1 and §5.2's about half, Scala, verified only in CI (no JDK on the machine this was planned on). cli/src/main/scala/marola/site/SitePages.scala: Nav, Page, a pure render, and staticPages emitting /about/index.html from the prose about.html carries today, both language blocks once MIP-0054 task 1 has landed. The nav comes from one List[Nav]; SiteBuilder.build writes the pages and replaces the nav between two marker comments in site/dist/index.html, so the static file stays openable locally. about.html becomes a one-line pointer to /about/. stamp_site_version.sh stamps every generated page; site.yml required files and allowlist gain about/ SitePagesSpec: render emits one <title>, one <meta name="description">, exactly one aria-current="page", and the same Page renders byte-identically twice. SiteBuilderSpec: about/index.html is written and the existing "real site/static lands in dist" case still holds. scripts/site_check.js: the generated nav equals task 1's menu-links. just quality green in CI 1

Later (not filed)

  • about-support: /about/#contact and /support/, §5.2, plus .github/FUNDING.yml first and separately as §5.2 says. Depends on 2.
  • news-dev: the markdown pipeline and the two collections, §5.3. Depends on 2.
  • feeds: /feeds/, §5.4. Blocked by MIP-0034 §5.6.
  • nav-switch: the interim six items become §3's set once the pages behind it exist; §11's first question decides which survive.

Decisions

  1. §5.5 and §5.6 are not tasks. §5.6 shipped as marola.dev/docs (#300, #306), and MIP-0064 rebuilt it as an mkdocs site that also publishes docs/*.md, which is what §5.5 asked for.
  2. Task 1 lands after the map-behaviour story, an issue with no MIP that fixes how the list, card and chat sheets behave on a phone (one open at a time, Escape, focus return, no alert()). The story creates site/static/ui.js for its sheet registry and adds it to site.yml and stamp_site_version.sh; task 1 adds the menu to it. The depends on column cannot name an issue outside a tasks table, so that edge is wired by hand after filing: scripts/issues.sh deps add <task-1 issue> --blocked-by <story issue>.
  3. Task 2 waits for MIP-0054 task 1, so the generated /about/ carries both languages the first time. That edge is also wired by hand: in the table it would make the two tasks files impossible to file in either order, since MIP-0054 task 1 depends on this task 1.
  4. The interim six items ship in task 1 unchanged. Changing which sections the nav names is the nav-switch task, not a side effect of the menu.
  5. The chat toggle moves into the menu in task 1 unless the maintainer vetoes it in the acceptance PR (MIP-0044 §11): it changes MIP-0033 §5.2's floating placement.