Skip to main content

max / makenotwork

Regenerate the residuals on the marked derivation quasi's derivation no longer recovers a branch by comparing renders, so every residual here is read off the marks the twin makes rather than off a diff. Regenerated with `export-residuals`, and the literals move only where a site became an arm: `chosen` on the theme picker and `latched` on the analytics range chips are two markups at one position now, which is what they always were and what the old derivation could not hold. Takes makeover-webview 0.77 and makeover-build 0.70 with it, both forced by the `links` rule rather than reached for. NOT YET VERIFIED END TO END. The residual suite cannot link on fw13 -- five attempts, killed by the memory watchdog at every parallelism and with test debug info off -- so this is pushed on the fix-forward call rather than on a green run. The check is `cargo test --lib quasi::residuals`, and it is what found the two defects the last two days of this work fixed.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01P8ostB2UmZJGj5WjSHRSot
Author: Max Johnson <me@maxj.phd> · 2026-09-08 22:24 UTC
Signed with PGP, not checked
Commit: 6f235b118b4b6f7bf5db8fa6561352eac5f6d629
Parent: 821fcef
3 files changed, +60 insertions, -46 deletions
M server/Cargo.lock +12 -12
@@ -5391,9 +5391,9 @@
5391 5391
5392 5392 [[package]]
5393 5393 name = "makeover-build"
5394 - version = "0.68.0"
5394 + version = "0.70.0"
5395 5395 source = "registry+https://github.com/rust-lang/crates.io-index"
5396 - checksum = "5acb5291d87c4bdda42acf7750d6509f8423392f1012321730d36f2d593479bd"
5396 + checksum = "379e20d1c5b1e27fefdcd0ec31a29289522edd1cfe2e08f31a710c478050c51a"
5397 5397 dependencies = [
5398 5398 "makeover",
5399 5399 "makeover-geometry",
@@ -5434,9 +5434,9 @@
5434 5434
5435 5435 [[package]]
5436 5436 name = "makeover-webview"
5437 - version = "0.75.1"
5437 + version = "0.77.0"
5438 5438 source = "registry+https://github.com/rust-lang/crates.io-index"
5439 - checksum = "ba1c7d0eaf7a3b6262afb1e3b0e1ad2b1e1aec09182342869a4a0c3e122988dd"
5439 + checksum = "5157138240216922199759f4c9c0547b363e388c57888aa1e46ca46fb38f062e"
5440 5440 dependencies = [
5441 5441 "makeover-geometry",
5442 5442 "makeover-layout",
@@ -10771,6 +10771,14 @@
10771 10771 "pkg-config",
10772 10772 ]
10773 10773
10774 + [[patch.unused]]
10775 + name = "synckit-client"
10776 + version = "0.10.0"
10777 +
10778 + [[patch.unused]]
10779 + name = "synckit-config"
10780 + version = "0.2.0"
10781 +
10774 10782 [[patch.unused]]
10775 10783 name = "quasi-immediate"
10776 10784 version = "0.109.0"
@@ -10798,11 +10806,3 @@
10798 10806 [[patch.unused]]
10799 10807 name = "painhours"
10800 10808 version = "0.1.0"
10801 -
10802 - [[patch.unused]]
10803 - name = "synckit-client"
10804 - version = "0.10.0"
10805 -
10806 - [[patch.unused]]
10807 - name = "synckit-config"
10808 - version = "0.2.0"
@@ -179,7 +179,7 @@
179 179 # through quasi-webview for makeover-layout's reason: two `form::` paths from
180 180 # two resolutions are two crates, and the `data-format="markdown"` rules in
181 181 # `static/layout.css` are generated from this one.
182 - makeover-webview = "0.76"
182 + makeover-webview = "0.77"
183 183 # For the request head the per-viewer state factory reads. axum re-exports it,
184 184 # but the factory's signature is quasi-axum's and names `http::request::Parts`.
185 185 http = "1.3.1"
@@ -265,7 +265,7 @@
265 265 # Emits static/geometry.css (makeover-geometry) and static/layout.css
266 266 # (makeover-webview). The same generator GO and BB run; only the output paths
267 267 # differ, since the server serves its stylesheets rather than bundling them.
268 - makeover-build = "0.69"
268 + makeover-build = "0.70"
269 269 # Read directly for the embeds' own copy of the spacing layer, which they need
270 270 # because an iframe cannot link a stylesheet. makeover-build does not re-export
271 271 # it, so the pin lives here and has to track the one makeover-build resolves.
@@ -502,16 +502,24 @@
502 502 ])),
503 503 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<form class=\"form\" hx-post=\"/api/users/me/ssh-keys\" hx-swap=\"outerMorph\" hx-disable=\"find button[type='submit']\" data-awaiting=\"indeterminate\"><div class=\"form-group\"><label class=\"form-label\" for=\"public_key\">Public Key</label><textarea class=\"field\" id=\"public_key\" name=\"public_key\" required aria-describedby=\"public_key-hint\"></textarea><div class=\"form-hint\" id=\"public_key-hint\">Paste the contents of your ~/.ssh/id_ed25519.pub or similar public key file</div></div><div class=\"form-group\"><label class=\"form-label\" for=\"label\">Label</label><input type=\"text\" class=\"field\" id=\"label\" name=\"label\" value=\"\"></div><button type=\"submit\" class=\"button act-submit\">Add SSH Key</button></form><h2 class=\"heading\">Console theme</h2><p class=\"text\">Color palette for your terminal dashboard over ssh makenot.work.</p><form class=\"form\" hx-put=\"/api/users/me/console-theme\" hx-swap=\"outerMorph\" hx-disable=\"find button[type='submit']\" data-awaiting=\"indeterminate\"><div class=\"form-group\"><label class=\"form-label\" for=\"theme_id\">Console theme</label><select class=\"field\" id=\"theme_id\" name=\"theme_id\" aria-describedby=\"theme_id-hint\">")),
504 504 ::quasi_router::stage::Op::Loop(::std::borrow::Cow::Borrowed(&[
505 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<option value=\"")),
506 - ::quasi_router::stage::Op::Hole { scope: 2, id: 0 },
507 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\"")),
508 - ::quasi_router::stage::Op::Branch(::std::borrow::Cow::Borrowed(&[
509 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed(" selected")),
510 -
505 + ::quasi_router::stage::Op::Arms(::std::borrow::Cow::Borrowed(&[
506 + ::std::borrow::Cow::Borrowed(&[
507 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<option value=\"")),
508 + ::quasi_router::stage::Op::Hole { scope: 2, id: 0 },
509 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" selected>")),
510 + ::quasi_router::stage::Op::Hole { scope: 2, id: 1 },
511 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</option>")),
512 +
513 + ]),
514 + ::std::borrow::Cow::Borrowed(&[
515 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<option value=\"")),
516 + ::quasi_router::stage::Op::Hole { scope: 2, id: 0 },
517 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\">")),
518 + ::quasi_router::stage::Op::Hole { scope: 2, id: 1 },
519 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</option>")),
520 +
521 + ]),
511 522 ])),
512 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed(">")),
513 - ::quasi_router::stage::Op::Hole { scope: 2, id: 1 },
514 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</option>")),
515 523
516 524 ])),
517 525 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</select><div class=\"form-hint\" id=\"theme_id-hint\">Following the terminal picks a light or dark palette from what your terminal reports. Separate from your profile theme, which is what visitors see.</div></div><button type=\"submit\" class=\"button act-submit\">Save Theme</button></form><h2 class=\"heading\">Access Tokens (HTTPS)</h2><p class=\"text\">Personal access tokens for git over HTTPS. Use a token as the password. Clone URL: https://&lt;token&gt;@makenot.work/")),
@@ -624,19 +632,20 @@
624 632 ::quasi_router::stage::Op::Hole { scope: 993, id: 2 },
625 633 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</span></div><div class=\"cell col-Tag cell-content cell-drops-next cell-value\">")),
626 634 ::quasi_router::stage::Op::Hole { scope: 993, id: 3 },
627 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</div><div class=\"cell col-Price cell-content cell-drops-next")),
635 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</div>")),
628 636 ::quasi_router::stage::Op::Arms(::std::borrow::Cow::Borrowed(&[
629 637 ::std::borrow::Cow::Borrowed(&[
630 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\"><span class=\"cell-tokens\"><span class=\"badge\" data-tone=\"success\">Free</span></span>")),
638 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<div class=\"cell col-Price cell-content cell-drops-next\"><span class=\"cell-tokens\"><span class=\"badge\" data-tone=\"success\">Free</span></span></div>")),
631 639
632 640 ]),
633 641 ::std::borrow::Cow::Borrowed(&[
634 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed(" cell-value\">")),
642 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<div class=\"cell col-Price cell-content cell-drops-next cell-value\">")),
635 643 ::quasi_router::stage::Op::Hole { scope: 993, id: 4 },
644 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</div>")),
636 645
637 646 ]),
638 647 ])),
639 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</div><div class=\"cell col-Date cell-content cell-drops-next cell-value\">")),
648 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<div class=\"cell col-Date cell-content cell-drops-next cell-value\">")),
640 649 ::quasi_router::stage::Op::Hole { scope: 993, id: 5 },
641 650 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</div></div>")),
642 651
@@ -652,24 +661,25 @@
652 661 ])),
653 662 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<div class=\"rest-pages\">")),
654 663 ::quasi_router::stage::Op::Loop(::std::borrow::Cow::Borrowed(&[
655 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<")),
656 664 ::quasi_router::stage::Op::Arms(::std::borrow::Cow::Borrowed(&[
657 665 ::std::borrow::Cow::Borrowed(&[
658 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("span class=\"rest-page rest-page-here\" aria-current=\"page\">")),
666 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<span class=\"rest-page rest-page-here\" aria-current=\"page\">")),
659 667 ::quasi_router::stage::Op::Hole { scope: 32, id: 4 },
660 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</span")),
668 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</span>")),
661 669
662 670 ]),
663 671 ::std::borrow::Cow::Borrowed(&[
664 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("a class=\"button rest-page\" href=\"/feed?page=")),
665 - ::quasi_router::stage::Op::Hole { scope: 32, id: 5 },
666 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\">")),
667 - ::quasi_router::stage::Op::Hole { scope: 32, id: 4 },
668 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</a")),
672 + ::quasi_router::stage::Op::Loop(::std::borrow::Cow::Borrowed(&[
673 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<a class=\"button rest-page\" href=\"/feed?page=")),
674 + ::quasi_router::stage::Op::Hole { scope: 32, id: 5 },
675 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\">")),
676 + ::quasi_router::stage::Op::Hole { scope: 32, id: 4 },
677 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</a>")),
678 +
679 + ])),
669 680
670 681 ]),
671 682 ])),
672 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed(">")),
673 683
674 684 ])),
675 685 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</div>")),
@@ -693,24 +703,28 @@
693 703 ::quasi_router::stage::Op::Hole { scope: 0, id: 0 },
694 704 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</h2>")),
695 705 ::quasi_router::stage::Op::Loop(::std::borrow::Cow::Borrowed(&[
696 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<a class=\"chip")),
697 706 ::quasi_router::stage::Op::Arms(::std::borrow::Cow::Borrowed(&[
698 707 ::std::borrow::Cow::Borrowed(&[
699 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed(" latched\" data-act aria-current=\"true\"")),
708 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<a class=\"chip latched\" data-act aria-current=\"true\" href=\"/dashboard/tabs/analytics?range=")),
709 + ::quasi_router::stage::Op::Hole { scope: 1, id: 1 },
710 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" hx-get=\"/dashboard/tabs/analytics?range=")),
711 + ::quasi_router::stage::Op::Hole { scope: 1, id: 1 },
712 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" hx-swap=\"outerMorph\">")),
713 + ::quasi_router::stage::Op::Hole { scope: 1, id: 0 },
714 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</a>")),
700 715
701 716 ]),
702 717 ::std::borrow::Cow::Borrowed(&[
703 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" data-act")),
718 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<a class=\"chip\" data-act href=\"/dashboard/tabs/analytics?range=")),
719 + ::quasi_router::stage::Op::Hole { scope: 1, id: 1 },
720 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" hx-get=\"/dashboard/tabs/analytics?range=")),
721 + ::quasi_router::stage::Op::Hole { scope: 1, id: 1 },
722 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" hx-swap=\"outerMorph\">")),
723 + ::quasi_router::stage::Op::Hole { scope: 1, id: 0 },
724 + ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</a>")),
704 725
705 726 ]),
706 727 ])),
707 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed(" href=\"/dashboard/tabs/analytics?range=")),
708 - ::quasi_router::stage::Op::Hole { scope: 1, id: 1 },
709 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" hx-get=\"/dashboard/tabs/analytics?range=")),
710 - ::quasi_router::stage::Op::Hole { scope: 1, id: 1 },
711 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("\" hx-swap=\"outerMorph\">")),
712 - ::quasi_router::stage::Op::Hole { scope: 1, id: 0 },
713 - ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("</a>")),
714 728
715 729 ])),
716 730 ::quasi_router::stage::Op::Lit(::std::borrow::Cow::Borrowed("<div class=\"figures\">")),