MIP-0046 tasks¶
Ordered delivery of MIP-0046 as stacked PRs
(.claude/skills/mip-tasks/SKILL.md, scripts/stack.sh). Branch mip-0046/<k>-<slug>, each based
on the previous; merge bottom-up, scripts/stack.sh restack after each squash-merge.
File MIP-0044's tasks first. Task 1 depends on 0044-T1, and just tasks-to-issues refuses a
cross-MIP dependency that is not filed yet.
| # | slug | delivers | tests (must exist before the PR) | depends on |
|---|---|---|---|---|
| 1 | sprite-icons | §5.1–§5.4 and §5.7. One <svg class="sprite" aria-hidden="true"> after <body> in index.html with the twelve <symbol id="i-…"> of §5.1, i-wave reusing WAVE_PATH verbatim. icon(id) in app.js and every call site of §5.2 by name: WIND_EMOJI becomes WIND_ICON; aspectsHtml drops the heading emoji and gives the wind, waves, whales, water-temperature and jellyfish cells their marks; FACILITY_LABEL/facilitiesHtml emit mark + word + count with a flex gap instead of ·; renderFooter says Sea life — and Ocean note —. #sound, now in MIP-0044's menu, gets i-sound. The legend's wave key becomes <use href="#i-wave">. style.css: .sprite, .ic, tabular-nums on the grid, the mark rail, .facilities flex; about 25 lines. README.md:1 loses its emoji. Markers stay inline paths, as §5.2 says |
scripts/site_check.js: §5.5's emoji needles rewritten to use href="#i-…" plus the unchanged words and numbers, not deleted; every <use href="#i-…"> that app.js emits for the fixture resolves to a <symbol id> in index.html; no character in U+1F300–U+1FAFF, U+2600–U+27BF or U+FE0F in site/static/*.html or *.js; the i-wave symbol's path equals WAVE_PATH and the legend key uses #i-wave; the marker title/keyboard/aria-label assertions unchanged and green. Screenshots at 390 px and 1280 px, tooltip and card open, where calm, breezy and strong wind must be tellable apart |
0044-T1 |
| 2 | chip-and-legend | §5.6. The list and card score chips render the number in --ink on --panel with a 4 px rule in the band colour, driven by the existing band classes (.score.c70 and so on; CSS only, no style=). The legend's aria-hidden moves from the whole .legend to the colour swatches, so the words are read. The harness stub palette is read from style.css's :root instead of the stale hard-coded hexes |
scripts/site_check.js: for each of the five bands, the chip's text and background colours resolved from style.css give at least 4.5:1; the chip keeps its band class and no style=; the legend container has no aria-hidden and each swatch has it; the stub palette equals style.css's token values. Screenshots at 390 px and 1280 px, list and card open |
1 |
Decisions¶
- Order. After MIP-0044 task 1, which moves
#soundinto the menu, and before MIP-0054 task 2, which wraps these same strings int(): the other order means rewriting every call site twice. Before MIP-0042's/v1/freeze, as §11 already recommends. - The wind barb has a fallback. If the 390 px screenshot cannot tell calm from breezy, task 1 ships the band word without a wind mark (§8) and says so in the PR. That is an accepted outcome.
- Task 2 implements §5.6's rule option because it is the only one that passes AA in all five bands (the table in §5.6). A veto in the acceptance PR changes this row before it is filed.
- The markers are not sprited (§5.2, §9). Their inline filled path stays tuned for area zoom.