Cryptograss:Moods/pickipedia-and-rabbithole/todo
What the people in this Mood have left each other to do. Kept by whoever notices;
mark an item done: true rather than deleting it, so the next person can
see it was finished and not merely dropped.
Compacted 2026-10-19. The live list is short and it is nearly all one thing: three pull requests and one deploy. Everything built on 17 and 18 October exists only as unmerged branches, so none of it is visible to anybody yet.
The goal, in Skyler's words: get Rabbithole working and playing live on PickiPedia, with a few songs having part cards and the highlights looking clean. The audience: IBMA, where Justin's read is that nobody sits through a whole song — so one track that lights up beats eleven that play in silence.
The architecture, settled 2026-10-18: Rabbithole is a dock along the bottom of PickiPedia. The shell hosts the wiki, because whatever persists holds the player and whatever swaps holds the article — and if the wiki hosted instead, every link would reload the page and the music would stop. A listen button inside the shell opens the dock and plays, rather than navigating.
Which dock, settled 2026-10-24: both. The window picks — the left sidebar at 1100px and wider, the bottom bar below it — and a person can overrule that from the switch in the top right, which is remembered until they press "auto". A phone therefore gets the bar upright and sideways, which is the case that was hardened on 21 and 24 October. The sidebar cannot go narrower than 292px because the Winamp skin is 275px of fixed bitmap, and scaling it was rejected: it takes the play button to about 20×15, and Skyler's read is that those buttons are already close to too small.
This list's YAML has a problem at line 177: Duplicate key "done" detected at line 177 (near "done: true").
- task: Merge rabbithole#2, then run the playbook
who: justin
kind: merge
link: https://github.com/cryptograss/rabbithole/pull/2
note: >
Twenty-two commits, the bottom bar and everything under it. Merging is not
deploying: the rabbithole-shell role has no cron and no webhook, so somebody
runs maybelle/scripts/deploy-pickipedia.sh on maybelle with the vault
password on stdin. It is the whole pickipedia-vps playbook, not a
rabbithole-only deploy, and it refuses if maybelle-config production is
behind main (checked 2026-10-18: it is not).
Production has served a shell dated 1 May 2026 all week — the old 320px left
sidebar. Every listen button on all eleven song pages opens it. That is why
Skyler kept seeing the sidebar; nothing is wrong with the buttons.
done: false
- task: The iPhone warp is unexplained and currently unreproducible
who: anyone
kind: review
link: http://hunter.cryptograss.live:14003/rabbithole/pickipedia-demo.html?webaudio=on
note: >
On 2026-10-19 August warped on Skyler's iPhone, and a four-player test
pinned it on the Web Audio graph: the same file through a bare audio
element was clean, through a graph it warped. iOS has skipped Webamp's
graph ever since, which costs iPhones the equaliser, the visualiser and
stereo balance. On 2026-10-21 ?webaudio=on -- the same page, the same
song, the graph back on, which is the configuration that originally
failed -- played clean on the same phone, direct from its speaker.
Nothing we changed in between touches audio. So the fault is real,
intermittent, and triggered by something nobody has identified. Leaving
the bypass on is a judgement, not a finding: an intermittent fault that
mangles the music is worse than a missing visualiser. What would settle
it is a second occurrence with the circumstances written down --
headphones or speaker, what else the phone was doing, whether iOS had
just updated.
done: false
- task: Firefox on Ubuntu — zoom breaks the dock, and Webamp drags out of place
who: magent
kind: edit
note: >
Justin, 2026-10-21. Two desktop faults the phone work did not touch.
Zooming scales only the wiki pane, not the shell, and at the zoom he
first loaded at most of the ensemble was cut off with no sign anything
was missing -- the same silent loss as the dock on a phone, and the
cards clip rather than scroll or wrap. And the Webamp window can be
dragged out of its place in the bar; it moved when he reset the zoom.
There was talk of an upstream Webamp option to pin it rather than make
it draggable -- find out whether that landed, and pin it here if not.
done: false
- task: Rename webamp-chartifacts.js
who: magent
kind: edit
done: true
note: >
Done 2026-10-21 in rabbithole#3: src/player/rabbithole-player.js, class
RabbitholeWebampPlayer, every import, both shells, the embed page, the
package entry points, the tests and the docs. Justin asked days earlier
and saw the old name in the PR twice before it was done. Justin's rule
for the name: chartifact *data* stays, "chartifacts player" is a fossil
and finding one means old code has crept back in. Still carrying it:
window.chartifactsPlayer and window.songChartifactsData, 56 uses -- renamed
to rabbitholePlayer / rabbitholeSongData on 2026-10-25.
- task: Merge rabbithole#3 — tests, the lost scene half, the pane, trails
who: justin
kind: merge
link: https://github.com/cryptograss/rabbithole/pull/3
note: >
Based on bottom-bar-layout, so it merges after #2 and shows only its own
commits. 36 tests where the repo had vitest configured and none at all.
Carries: the half of 2e83c1a that puts the scene on the card; CSS for
cooldown, harmony and rhythm plus pickup-rise, has-rabbit and engineer-card,
all left behind in arthel; a README table naming which file is the product
and which are stale copies; the pane loading the wiki's real stylesheets in
MonoBook rather than Vector, which is what "the backdrop looks super broken"
was; click a part to seek there; three pane chrome modes behind a switch;
the listen button playing in the dock instead of navigating; a queue, with
the track-end hook the player has always called into nothing; and trails.
done: false
- task: Merge pickipedia#148 — the rabbit chases the carrot
who: justin
kind: merge
link: https://github.com/cryptograss/pickipedia/pull/148
note: >
The listen button is already live on all eleven song pages: the template
carries inline styles, so the shape did not wait on a deploy. This adds what
inline styles cannot express, hover and the keyframes. Same stylesheet the
pane now loads, so one rule set covers the wiki and the player.
Also wants, before it merges: the button's position is a guessed negative
margin (-5.9em) rather than a rule anchored to the heading. It looks right
on a desktop today and will drift on a narrow screen or a wrapped title.
done: false
- task: Merge pickipedia-mcp#33 and restart the MCP server
who: justin
kind: merge
link: https://github.com/cryptograss/pickipedia-mcp/pull/33
note: >
A marker line is its own paragraph, so it stops eating the prose above it.
Cryptograss/Horseshoe Crab has a verified template directly under line 3;
the middleware merged the two, the join looked verified so it went out
verbatim, and the wiki's gate refused every bot edit to that page. Needs a
restart as well as a merge — the server loads its bundle at start.
done: true
- task: Look at it on a phone
who: skyler
kind: review
note: >
Two things were found at 390px on 2026-10-19 before Skyler looked, and both
are patched on their branches, so the phone check is now about what is left
rather than about these. (1) The listen stack lands on top of the page title
and the green Listen button is not readable; the negative margin assumed a
short title and a wide column. Cancelled below 720px in pickipedia#148.
(2) The dock measures 1741px inside a 390px screen with overflow-x hidden,
so the song select, Edit Timeline, every musician card and the collapse
button are simply gone. Below 720px the bar now scrolls sideways with the
header pinned left -- awkward, not unusable; a real small-screen dock is
still owed. Neither patch is deployed, so production still shows the old
behaviour. Preview, while the container lives:
http://hunter.cryptograss.live:14003/rabbithole/pickipedia-demo.html
done: false
- task: Confirm the iPhone plays clean with the Web Audio graph bypassed
who: skyler
kind: review
link: http://hunter.cryptograss.live:14003/rabbithole/pickipedia-demo.html
note: >
Found 2026-10-19: Webamp's createMediaElementSource is what warps the
audio on iOS. Player 1 of the A/B page (ogg, plain audio element) was
clean and player 3 (the same ogg through a Web Audio graph) warped --
same file, decoder, connection and device, one difference. On iOS the
graph is now not built at all; the element plays natively. The cost on
iPhones is the equaliser and the visualiser doing nothing and stereo
balance fixed at centre; volume is mirrored onto the element so the
slider still works. ?webaudio=on gets the old behaviour back for
comparison on the same phone. What is wanted: does August play clean
through the whole song now, and does the volume slider still move it.
Confirmed by Skyler on 2026-10-19: August played the whole way through
with no warping. The iPhone audio is fixed.
done: true
- task: Which of the four players warps -- the Web Audio graph was the last suspect
who: skyler
kind: review
done: true
note: >
2026-10-19, player 1 of 4 reported clean: the Ogg played plainly through a
bare audio element is perfect on the iPhone. That clears the file, the
gateway, the network and Safari's Vorbis decoder all at once -- every
explanation that does not involve our own code. What is left is the Web
Audio graph: Webamp routes every track through
createMediaElementSource, which has a long history of trouble on iOS
Safari. Players 3 and 4 on the A/B page are that same route with nothing
else attached; 3 is the one that decides it. If 3 warps, the fix is to
keep iOS off the graph -- the element plays natively and we lose the EQ
and the visualiser on that platform, which is a fair trade.
done: true
- task: Was the Ogg Vorbis decode what warps the audio on an iPhone
who: skyler
kind: review
done: true
note: >
2026-10-19, after the readout came back clean: no stall, no drift, rate 1,
and the audio still sounds warped. currentTime follows the media element's
own timeline, so it can keep perfect time while what reaches the speaker
is mangled -- which clears the player of stalling and points at the decode
or at the Web Audio graph Webamp routes through. Ogg Vorbis is the suspect
to eliminate first: Safari learned it only recently, and it is what we
serve by default because it is a quarter the size of the flac beside it.
?enc=flac and ?enc=ogg force one without changing any code. If flac is
clean, prefer flac on Safari and the thing is done. It was not the
decode: the ogg plays clean through a bare audio element on the phone.
done: true
- task: Audio stutters on an iPhone, and nothing on this end reproduces it
who: skyler
kind: review
link: http://hunter.cryptograss.live:14003/rabbithole/pickipedia-demo.html?rhdiag=1
note: >
Reported 2026-10-19: audio plays but speeds up and slows down, most
audibly at the A after the first B of August -- t=50, where the solo
passes to Harry Clark. Ruled out by measurement rather than by guessing:
the 100ms display loop costs 0.2ms median and 2.8ms at worst over 120
ticks; the IPFS gateway returns the whole 4MB ogg in 1.9s and serves
256KB ranges at a steady 215KB/s against the 24KB/s the song needs;
across t=30 to t=66 audio time tracks wall clock to within 0.00s with no
waiting or stalled events and zero long tasks. Turning auto-switch off
changed nothing he hears, so the pane rebuild is not it either. So the
measurement has to happen on the phone: ?rhdiag=1 pins a readout to the
top of the page showing drift, buffer, playback rate and the last stall
events. What is wanted back is the readout at the moment it sounds wrong.
Answered: the readout stayed clean through the warp, which is what sent
the hunt to the Web Audio graph, where it ended.
done: true
- task: Confirm an iPhone can actually decode what we serve
who: skyler
kind: review
note: >
The four built-in songs pointed at /audio/August.flac and friends, which
nothing has ever served -- 404 on preview and production both. That is why
the dropdown played silence on 2026-10-19; it was never a mobile bug. They
now resolve through the Release page like everything else, and the browser
picks the encoding: ogg if canPlayType says it can, flac otherwise. Safari
was unable to decode Ogg Vorbis for most of its life, so the open question
is only answerable on a real iPhone -- does it play, and is the title bar
showing a duration rather than blank parentheses.
Answered 2026-10-19: it plays, with a real duration, and the ogg decodes
clean through a bare audio element. The decoder was never the problem.
done: true
- task: Look at the phone dock and say what is still wrong
who: skyler
kind: review
link: http://hunter.cryptograss.live:14003/rabbithole/pickipedia-demo.html
note: >
Built to Skyler's sketch on 2026-10-19: album, selector and artist toggle
on their own row above the player; the player left with the musician
cards beside it; all the song parts along the bottom. Grid rather than
flex, so every child is placed by name. The skin is scaled 15% -- 290px
of it left only 100px for cards, which is not a card -- and that costs
tap-target size, taking the play button from about 12px to 10px. That is
the number most worth your thumb. Measured at 390x844: no horizontal
overflow, dock 200px of 844, all twelve of August's parts readable, six
cards reachable. Desktop unchanged.
done: false
- task: The dock needed a real small-screen layout, not sideways scrolling
who: magent
kind: edit
done: true
note: >
- task: Bottom bar or left sidebar — pick the dock
who: skyler
kind: decision
link: http://hunter.cryptograss.live:14003/rabbithole/pickipedia-demo.html?layout=bar
note: >
Asked for 2026-10-24. Both layouts are live behind one switch in the top
right corner of the demo; it reloads, because the musician cards are placed
differently at startup in each. Bottom bar: cards in the middle zone of the
bar, parts along the full width, the wiki gets the whole width above. Left
sidebar: 320px column, cards stacked under the player with the soloist
starred, parts wrapped two rows, the wiki keeps the rest. The architecture
settled on 2026-10-18 is the bar; this is a look at what was given up.
Answered 2026-10-24, and the answer was both: the window picks (sidebar
at 1100px and wider, bar below), a person can overrule it from the switch
in the top right, and the overrule is remembered until they press "auto".
done: true
- task: "Nine of eleven 4masks tracks have empty timeline AND empty ensemble"
who: skyler
kind: edit
link: https://pickipedia.xyz/wiki/Release:QmUWtV7fG1K9pM5TQSf5c38vmh9MtU6p3VNQuzaxvYr6ep
note: >
Checked 2026-10-25. Only August and Paint Exchange have anything. Every
other Release:<cid>/Metadata page reads "timeline: {} ensemble: {}" --
including Silver 44, which Skyler charted on 24 October. That edit is not
on pickipedia.xyz and not on the hunter preview wiki either, so it did not
save anywhere I can see. Worth finding out what the editor did with it
before charting eight more.
The ensembles do not need inventing: every track except Masks has a
Studio cut block on its Song: page naming the players and instruments.
done: false
- task: "Magent cannot edit the Release namespace"
who: justin
kind: review
note: >
"protectednamespace: You do not have permission to edit pages in the
Release namespace", 2026-10-25, trying to fill in the ensemble for Silver
44 from its own Studio cut block. That blocks the bot from doing the
metadata prep for the other ten tracks, which is otherwise a mechanical
copy from data already on the wiki. Either a grant, or it stays hand work.
done: false
- task: Which chrome should the pane wear
who: skyler
kind: decision
note: >
Three modes are built and switchable from a select in the pane: content, a
header we own with a working search, or MonoBook's full chrome fetched from
the real page. In skin mode the search box is furniture and says so — it
cannot run scripts. Skin also doubles the pane's weight and adds a
round-trip per page, which the auto-switch makes often.
done: false
- task: Which one is THE play button
who: skyler
kind: decision
note: >
Three in the bar: webamp's transport, the carrot, and .mini-player-btn.
Open since 2026-10-16. Now sharper: the dock's listen button is a fourth
way to start audio, and a visitor met all four at once.
done: false
- task: Timelines — nineteen of twenty-one tracks are empty
who: skyler
kind: edit
note: >
August and Paint Exchange have real ones. Everything else plays with a blank
bar. Hand-edit with the player's Edit Timeline button, which is already the
tool. Worth knowing: a sub-moment's time key inside a section is read as an
absolute time, not an offset, so section1 with a key of 3 lands at 3 seconds
— before its own section. Pinned by a test, not endorsed; ask Justin whether
that is intended before charting around it.
done: false
- task: Metadata for some vocal songs
who: magent
kind: edit
note: >
Justin, by voice, 2026-10-18: everything charted so far is instrumental, so
we have not found out what Rabbithole does with words. Also the highest
leverage thing on this list for trails, which are limited by coverage and
not by the algorithm — 20 songs, nearly all ours.
done: false
- task: Document the metadata format
who: magent
kind: edit
note: Justin asked for it by voice, 2026-10-18. Nothing written yet.
done: false
- task: Write up the URL question
who: magent
kind: review
note: >
Justin, by voice: the article is the primary URL and what is playing is a
second axis, and he does not know how they compose. The complication he had
not hit: the auto-switch rewrites the article for you, so the URL you would
share is being changed by the music. Share probably has to mean something
explicit rather than whatever the address bar says.
A trail is the same object seen from the other end — share-this-trail and
find-me-a-trail are one feature, so they want solving together.
done: false
- task: Unwrap the cover image on the song pages
who: magent
kind: edit
note: >
Each of the eleven wraps its cover in Bot_proposes. An image is not a claim,
and when it fails to render you get an empty bordered box with a lone
[unverified] marker, which is what the odd box at the top of each page is.
done: false
- task: The listen button on the other ten song pages
who: magent
kind: edit
note: >
August has it in its new place, above the infobox so it floats to the top
right. The other ten still have it mid-page. Waiting on the phone check and
on #148, since the position is a magic number until then.
done: false
- task: Paste one line into Horseshoe Crab Day 9
who: anyone
kind: edit
link: https://pickipedia.xyz/wiki/Template:Horseshoe_Crab_Day_9_paste
note: >
One bullet, the Webamp vendoring of 11 October. Everything else moved to
Cryptograss/Jellyfish. The bot cannot save that page until mcp#33 ships.
done: false
- task: Write the four people Rabbithole would strand
who: anyone
kind: edit
note: >
David Grier, Ice Quilitz, Jeff Fehlauer, Luna Lavender. Grier now appears in
trails as a hop, so he is a dead end in the middle of a feature rather than
at the end of a click.
done: false
- task: Decide the remaster / remix / overdub line
who: justin
kind: decision
link: https://github.com/cryptograss/pickipedia/issues/144
note: Blocks the automatic ensemble path. The melodica overdub is the sharp case.
done: false
- task: Special:Categories is reporting numbers that are not true
who: justin
kind: deploy
note: Leaderboards claims 8,265 members and has 4. maintenance/recountCategories.php.
done: false
- task: Delete Template:Studio track and Template:Studio track/testcases
who: justin
kind: edit
note: The wiki's only script error. The bot cannot delete.
done: false
- task: Look at the front page draft and say whether to adopt it
who: justin
kind: review
link: https://pickipedia.xyz/wiki/Template:Main_Page_draft/preview
note: Main Page untouched since April, read 530,000 times, opens on half a screen of nothing.
done: false
- task: Merge 9f83ab7 and c13f2e8 — the two most-wanted tools
who: justin
kind: merge
link: https://github.com/magent-cryptograss/pickipedia/commits/production
done: false
- task: The infobox asks for instrument icons that do not exist
who: magent
kind: edit
note: "Template:ThinkingEntityInfo builds a File: link without asking whether the icon exists."
done: false
- task: Finish populating {{Song}} on the twelve pages outside 4masks
who: magent
kind: edit
done: false
- task: The metadata editor no longer works inside the pane
who: magent
kind: review
note: Injected HTML does not run scripts, so the editor cannot boot in the pane. Worth a decision rather than a silent loss.
done: false
- task: Release the held podcast import — 240 pages would change, limit is 50
who: magent
kind: review
link: https://pickipedia.xyz/status/podcast-import.txt
done: false
- task: Self-host packery, js-yaml and the Google Fonts faces
who: magent
kind: edit
note: Same class of dependency that killed the player once. Webamp is vendored; these are not.
done: false
- task: Drop the four hard-coded demo songs
who: magent
kind: edit
note: audioFile "/audio/August.flac" and friends, 404 everywhere, and the four arthel YAML rabbithole blocks that feed them.
done: false
- task: Masks has no session data anywhere
who: anyone
kind: edit
link: https://pickipedia.xyz/wiki/Song%3AMasks
note: The only one of eleven tracks with no ensemble recorded. Somebody who was there can fix it in a sentence.
done: false
- task: Merge maybelle-config#236 and redeploy delivery-kid — waveform peaks
who: justin
kind: merge
link: https://github.com/cryptograss/maybelle-config/pull/236
note: >
The editor's waveform comes from delivery-kid's /peaks/{cid}.json (about
18 KB a song) instead of downloading the whole song (6.4 MB for Swords).
Until it ships, the ruler shows a "show waveform" button that decodes in
the browser only when pressed. Client side is 293a977 on rabbithole#3.
done: true
- task: Say go — copy the seven other people's Commons files onto PickiPedia
who: justin
kind: decision
note: >
From #wikimedia-commons-embeds, 2026-10-28. On the night of 27 October
Commons' api.php answered mostly 503 (some said "too many requests"), and
every InstantCommons image on the wiki broke on its next re-render. The
26 of Justin's own (RadicalHarmony) that PickiPedia uses are now local
copies, Main Page included. Seven files by other Commons authors still load
from Commons and break again next wobble: the Oxygen optical-burn icon in
Template:Uncataloged, Wikipedia-logo-v2.svg in Template:See wikipedia page
(the two widest-reaching, do these first), C.F.Martin Factory38 (clip).jpg
and Mumbai clams.jpg on Independent Luthiers' Bivalve Mollusk Initiative,
Johnny-Cash 1972.jpg on PickiPedia:Satire, the Füger Prometheus on
Justin's copyright essay, and the rambutan photo on Rambutan. Commons was
healthy again by 13:26Z on 28 October, so nothing is broken today.
Magent does the copying once Justin says go; slowly, because
upload.wikimedia.org was answering 429 to hunter.
Answered 2026-10-28, Justin: no -- Commons is back, we're good.
done: true
- task: Check the licences of the Oxygen icon and the rambutan photo
who: magent
kind: review
note: >
The other five of the seven are CC BY 3.0, CC BY-SA 2.0/3.0/4.0 or public
domain, so copying with attribution is fine. These two were not checked
(the Oxygen set is usually LGPL). Check before copying them.
Moot 2026-10-28: no copies.
done: true
- task: Commons as a rule — copy on embed, or keep InstantCommons live
who: justin
kind: decision
note: >
Wikimedia is rolling out API rate limits this year; InstantCommons wikis
get 200 requests a minute, and the 27 October outage looked like their
rollout rather than our quota. Either PickiPedia keeps relying on Commons
live and accepts the occasional broken night, or new Commons embeds get a
local copy (a bot sweep could do it). If the 503s come back and stay,
bot-traffic@wikimedia.org is the address their error message gives.
Answered 2026-10-28, Justin: keep InstantCommons live.
done: true
- task: Settled, 16 to 18 October
who: anyone
kind: review
note: >
Written up in full at Cryptograss/Jellyfish. In short: the bottom bar built
out with Sky calling each move; eleven 4masks song pages; Template:Listen in
Rabbithole on all of them, now a button with a queue and a trail beside it;
the iframe replaced by a same-origin fetch into a shadow root; the pane
wearing the wiki's own stylesheets; clickable part cards that seek; three
chrome modes; a working queue and the track-end hook that had never been
defined; and trails — the search over who played with whom, weighted so it
routes around the hub rather than answering every question with Justin.
Found along the way: production five months stale, three shells in one repo
with the URL route pointing at the wrong one, arthel's copy of the player
thirteen months behind, half of a 2025 commit missing, and a middleware bug
that had made one page unwritable for its whole life.
done: true