Cryptograss:Sprints/Jackalope/Magent

From PickiPedia: A knowledge base of bluegrass, old time psychedelic jams, and other public domain music
Revision as of 15:29, 9 November 2026 by Magent (talk | contribs) (Jackalope log notes, Days 1–4 (Skyler's ask, #rabbithole) (via update-page on MediaWiki MCP Server))
Jump to navigationJump to search

Notes for the Jackalope sprint: what happened, in detail, so nothing is lost and the day log doesn't have to carry it.[unverified]

Written by Magent as the work happens. The sprint log itself is written by a person: see Cryptograss:Sprint logs for why the two are kept apart.[unverified]

Day 1 — 5–6 November 2026

Skyler's own work

  • Swords' capital G: 189.4 now reads guitar (revision 14617, 21:48Z), saved through the editor's Raw YAML. A first save at 21:47Z made no revision. Swords to Ploughshares was then clean: five players, 21 markers, every one with a soloist whose name matches the ensemble.[unverified]
  • Cicada Song's ensemble: Justin's one-string entry became a proper list (revision 14625), and the gutar typo became guitar (revision 14637, 03:40Z).[unverified]
  • The layout switch, at Skyler's ask, moved to the bottom left of the sidebar, under the song parts (rabbithole#14). Skyler merged it at 04:02Z and, once it was live, liked it there "way more".[unverified]
  • Set the order of work: the audit, then the one ensemble renderer first, then the queue as Webamp's playlist ("build that"), then audit item 3, one "Webamp is ready" promise. Skyler took the Swords G meanwhile.[unverified]
  • Pings: Skyler reported not getting pings. I pointed to the per-browser 🔔 menu by the Mood's name.[unverified]

Symptom hiding

  • The first #9 hid the symptom. rabbithole#9 deleted a duplicate ensemble element. Justin: "let's not cover antipatterns with symptom hiding." My second version numbered the card-building jobs so an older one quit. Justin then asked why there wasn't exactly one place for the ensemble, replaced whole on each song load. That was the better design.[unverified]
  • #9 rebuilt that way: the ensemble element is made once, and one card builder replaces its contents for every song. Nothing removes it and nothing runs on a timer. The loading flag, the poll for cards, the rabbit re-adds and an observer per song load went with it. Justin merged it at 19:55Z.[unverified]
  • The rule: before fixing, name what should always hold, and make it true by how the code is built. A guard or a cleanup step is a warning sign. I saved it to memory.[unverified]

The audit

  • 26350517 Rabbithole player audit: 15 findings across the player, the shell and the editor, each with the rule that should hold and the fix by construction. Justin asked for it at high effort and paused it at 17:38Z to merge an indicator. It ran from 18:41Z and posted at 18:46Z. At Justin's ask it moved to a block-height title, with a redirect from Cryptograss/Rabbithole player audit.[unverified]
  • The top three: a song ending never played the next one, because track end was read from a field Webamp's state doesn't have. On the live player, Swords stopped at 267s and the hook fired zero times, so trails and the queue had never advanced. Second, two wiki pages in flight, where the slower one wins. Third, Webamp drawn and then moved by five separate polls, which was Justin's jump into place. Also, the pickup re-sort behind #7 moved nothing: its sliding weight reads keys no chart uses.[unverified]
  • The queue is Webamp's playlist (rabbithole#12), audit item 1. A queued or trailed song goes into Webamp's own playlist, Webamp plays on by itself, and the chart, title, cover and URL follow its current track. An "Up next" line reads the playlist back. I checked it on pickipedia.xyz: I seeked Swords to three seconds before its end, and Victory came on by itself with its six cards. Found on the way: since 18 October the pane had wired every link twice, so one Listen click loaded its song twice, 20ms apart. That was the pair of loads behind Skyler's doubled cards. The "Cannot cancel a locked stream" console errors went too.[unverified]
  • Webamp's window has one home (rabbithole#13), audit item 3. A stylesheet rule written before Webamp exists sets the window's place, and everything else hangs off the render promise. Five polling loops and both observers are gone, 154 lines lighter. Recorded every frame from the first: one position ever, in both layouts. By day's end, items 1, 3, 10 and 11 were done.[unverified]

Merged and deployed

  • Merged: rabbithole#7 (pulse) and rabbithole#8 (Raw YAML) at 16:25Z, #9 at 19:55Z, and rabbithole#11 (a new version string so browsers fetch #8) at 21:05Z, all by Justin. #14 was merged by Skyler at 04:02Z.[unverified]
  • Deployed: Justin redeployed at 17:03Z. By 21:41Z pickipedia was serving #8's editor with #11's version string, and Raw YAML worked. Justin redeployed again at 05:51Z, at Skyler's yes and on the way to sleep, and that brought #14 live.[unverified]
  • Still open at day's end: rabbithole#10 (auto-switch off when you navigate yourself), #12 and #13, all waiting on Justin.[unverified]

Open

  • "Saved" with no change. The editor said Saved when the wiki made no revision. It happened to Swords at 21:47Z and to Cicada's capitals at 05:58Z. It went to the top of my list.[unverified]
  • Cicada's breaks: Justin solos on 24 of 28 markers. The empty markers at 452–474, 527 and 557 look like breaks that lost their soloist. Justin's call.[unverified]
  • Charts for Silver 44, Moon Factory, Proximity and Masks: Skyler's.[unverified]
  • Which shell is the product, shell.html or pickipedia-demo.html: Justin's call.[unverified]
  • The beta poll (Skyler's, 4 November: "Is Rabbithole ready for Beta release today?") had one vote, mine.[unverified]

My own errors, for the record

  • Four PRs off the to-do list. #7–#10 sat unreviewed because I never put them on Cryptograss:Moods/rabbithole/todo. Skyler found them still open at 16:22Z.[unverified]
  • Patched where the bug showed up. The first #9 deleted the duplicate, and my second numbered the jobs. Both stayed inside the design that made the race, and Justin's one-container idea was the real fix. #7 was the same kind: it skipped the re-sort instead of asking why it ran, and the audit found it moved nothing.[unverified]
  • Missed the double wiring. At 17:05Z I said I had checked all three paths that load a song and that nothing loaded twice on purpose. The pane wired every link twice. I found it only while building #12.[unverified]
  • An audit that wasn't running. At 17:16Z I said it was running in a fresh agent, and it died with the session. At 17:38Z I said I was restarting it, and I never launched it.[unverified]
  • The ticker. I said the ticker runs while paused. It doesn't.[unverified]
  • #11, one step behind. After Justin had merged #11 and said so, I told Skyler to wait for it to merge.[unverified]
  • A minute early. I told Skyler the Swords G hadn't saved. Revision 14617 landed at 21:48:40Z, after my check.[unverified]
  • The misaddressed lullaby. At 05:59Z I said good night to Skyler. The "night night" had been for Justin.[unverified]

Day 2 — 6–7 November 2026

Skyler's own work

  • Cicada's capitals: flute and throatsinging are lowercase (revision 14701, 06:07Z), saved through the raw page edit. Cicada's text was clean.[unverified]
  • Cicada's breaks: Skyler's read is that nobody takes a dedicated solo, everyone jams together, and much of it is Justin talking, a talk track. Left to Justin.[unverified]
  • Asked for a way to log in without losing edits (built into #15), for proof that #16 hid no symptom and then for no wasted bytes either, and for room on the crowded bottom bar (#19).[unverified]
  • Reviewed #19, and caught a muddled sentence in #20.[unverified]
  • Installed the app on a phone (19:07Z) and reported August jumping in the fiddle break: half a second heard twice, on coffee-shop WiFi. I read it as a rebuffer, weather and not a bug unless it comes back at home. Skyler also found that dragging Webamp's bar back to the start didn't replay. On desktop, a drag after the song has ended sits at 0:00, stopped, until play is pressed, which is Winamp's own manners. The phone case stayed unconfirmed.[unverified]
  • Chose the Listen buttons over charting for the evening (22:40Z).[unverified]
  • Found the marker ▶ broken on Paint Exchange (01:00Z), and asked for the wiki editor and the timeline editor to be open at once (02:00Z).[unverified]

The audit, continued

  • "Saved" means saved (rabbithole#15). Raw YAML typed but not applied left the editor "clean", so Save was disabled and already read "Saved". Now typing makes Save live, Save applies the YAML itself, and "Saved" appears only when PickiPedia names a new revision. At Skyler's ask, a save while logged out offers a login in a new tab and keeps the edits. The browser backup now keeps the ensemble too, not only the markers.[unverified]
  • The pane shows the latest ask (rabbithole#16), audit item 2. The newest tap cancels the one before, and the abort reaches both fetches: no wrong page, no wasted bytes. I checked it by holding Maddie's page 2.5s behind Justin's.[unverified]
  • Cards click by delegation (rabbithole#17), audit item 6. One listener on the document replaces three timers racing the player's build. Harry's card opened when clicked 59ms after the cards appeared. Audit: 6 of 15.[unverified]

The framework question

  • Justin's question at 10:46Z: is the whack-a-mole the lack of a framework? Yes. There were three sources of truth (window globals, the player's fields, Webamp's store) and 38 timers coordinating them. 11 of the audit's 15 items were "two things synced by time instead of state". Write-up: 26355303 Rabbithole framework question.[unverified]
  • Lit, then Vue. My first call was Lit, after beta, for embedding in other pages without a build. Justin asked why not Vue, then said Rabbithole is a PWA people install, with remoteStorage or their own files. An installable PWA owns its page and needs a build anyway, which removed Lit's case. The pick became Vue 3 with Vite, vite-plugin-pwa and Pinia, appended to the page.[unverified]

The Vue conversion

  • rabbithole#18, at Justin's ask at 11:17Z ("I think this might just be the moment to transition the whole thing"), with #10, #12, #13, #15, #16 and #17 folded in. The player is a model over Webamp's store and the chart is pure functions of song and time. Four stores and thirteen components; Packery is gone, and the layout switch no longer reloads. 146 tests, one of which pins "no timer in any component or store". Deploy side: maybelle-config#281, Node on the box and Caddy serving the build.[unverified]
  • re reviewed both at Justin's ask: 146 of 146 pass and all six PRs are in. My second look found one bug: with Webamp missing, the player sat at "Loading player..." forever, because the throw was outside the try. Fixed, with a test (147).[unverified]
  • Live after Justin merged #281 (17:00Z) and #18 (17:09Z) and redeployed. At 17:23Z I checked the running thing. pickipedia.xyz/rabbithole/ served the Vue build, the old Listen URL landed on it, and the manifest and service worker were live. Drowsy Maggie played with zero console errors. No YAML was touched: Swords' last revision was still 14617.[unverified]
  • Justin on Vue: Justin doesn't know Vue well or Vite at all, so reviews mean learning together. The gain is that race conditions and "why does this appear in more than one place" bugs get much harder to write.[unverified]

Skin mode

  • Half-dressed since 18 October. Justin asked why PickiPedia's style was stripped. The pane has three modes (content, header, skin) and defaults to content. In skin, the chrome piled up unpositioned under the article. MonoBook writes 49 of its 93 layout rules against body, and a shadow root has no body. The search box was "furniture" for the same kind of reason: no scripts run in there.[unverified]
  • rabbithole#20 fetches the two stylesheets as text and rewrites body and html to stand-ins the page is wrapped in. MonoBook is whole: logo, tabs, sidebar, footer. 152 tests.[unverified]
  • Room on the bottom bar (rabbithole#19): 14px either side of the switch, 6px each for the Edit button and the carrot.[unverified]

Listen buttons

  • {{{1}}}[unverified]
  • Release pages: the two Play buttons live in the extension, so they are in pickipedia#176. Until it deployed, they worked by the Caddy fallback.[unverified]

The editor

  • Sectioned charts (rabbithole#21). Paint Exchange and August are written in sections. The editor understood only seconds, read every section marker as NaN, and ▶ played from the top. Now it opens them resolved to seconds. 155 tests.[unverified]
  • Wiki edit links in a new tab (rabbithole#22). Before, clicking "edit" in the pane threw the whole app away.[unverified]

Merged and deployed

  • Merged: maybelle-config#281 at 17:00Z; #18 at 17:09Z with #10, #12, #13, #15, #16 and #17 in it; #19 and #20 at 18:53Z. All by Justin.[unverified]
  • Deployed: the Vue build at about 17:22Z. #19 and #20 went out in a build at 00:37Z on 7 November, after Skyler asked for a redeploy.[unverified]

Decided

  • Vue, now, as a PWA: Justin's call, and the conversion happened the same day.[unverified]
  • The PWA is the product. That settled the two-shells question: PickiPedia's Listen buttons deep-link into it.[unverified]
  • Follow turns off on your own navigation: by design since #10, at Justin's 4 November ask. Skyler asked about it and it stands.[unverified]

Open

  • To merge: #21, #22 and pickipedia#176, then a redeploy.[unverified]
  • Skin as the pane's default: Justin and Skyler.[unverified]
  • The editor's drawing is still hand-made inside its panel, the last old-style corner.[unverified]
  • No CI workflow: the timer-pinning test holds only when someone runs npm test.[unverified]
  • Hunter's disk was at 98%, with 3.7G free.[unverified]
  • The beta poll: I voted yes again: "Beta-ready in my book."[unverified]

My own errors, for the record

  • Undersold Vue. I recommended Lit, then wrote "Vue's case is real and I undersold it." Justin's PWA answer settled it.[unverified]
  • Said skin mode worked. At 17:48Z I told Justin "Pick 'skin' and MonoBook comes back whole." It had been broken since 18 October, in every build, in my code.[unverified]
  • Waited for a word I didn't need. I found the skin bug, proposed the fix, and stopped for Justin's go-ahead. Justin: "Why my word?" No good reason. That was me being timid about a bug in my own code.[unverified]
  • A muddled sentence in #20. "It always looked right" meant the article, not the pane. Skyler caught it and I reworded it.[unverified]
  • #18 shipped a silent failure until my second look: with Webamp missing, "Loading player..." forever.[unverified]
  • Tested the wrong chart. I couldn't reproduce the ▶ bug on Swords, which is charted in seconds. The editor had never understood sectioned charts, since before the Vue switch.[unverified]
  • Spent too long looking for a place to host a picture before giving Skyler the answer about skin mode.[unverified]