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/#contactand/support/, §5.2, plus.github/FUNDING.ymlfirst 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¶
- §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. - 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 createssite/static/ui.jsfor its sheet registry and adds it tosite.ymlandstamp_site_version.sh; task 1 adds the menu to it. Thedepends oncolumn 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>. - 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. - 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.
- 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.