Changeset 02c6231 in Klonkt
- Timestamp:
- 08/08/2026 01:28:38 AM (5 weeks ago)
- Branches:
- main
- Children:
- 2bd31d6
- Parents:
- 9c9a3d9
- git-author:
- Robin <roboburr@…> (08/08/2026 01:28:29 AM)
- git-committer:
- Robin <roboburr@…> (08/08/2026 01:28:38 AM)
- File:
-
- 1 edited
-
.beads/issues.jsonl (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
.beads/issues.jsonl
r9c9a3d9 r02c6231 1 {"_type":"issue","id":"prutfolio-src-cke","title":"Cross-tenant lek: playlist-tak van setAudioFediOpen opende bestanden van andere sites","description":"setAudioFediOpen in src/routes/posts.js opende de [[playlist:id]]-tak zonder site-check, terwijl de track- en album-tak wel AND site_id = ? hadden. playlists.id is een globale primary key, dus een post op site A met [[playlist:x]] van site B zette de tracks van B permanent open (fedi_open is eenrichtings). Gevonden 7-8-2026 tijdens shaer-ayc. Fix: site_id-filter op de TRACKS in de subquery, plus test/fedi-open-tenancy.test.js."," status":"closed","priority":1,"issue_type":"bug","owner":"roboburr@gmail.com","created_at":"2026-08-08T00:47:53Z","created_by":"Robin","updated_at":"2026-08-08T00:48:03Z","closed_at":"2026-08-08T00:48:03Z","close_reason":"Gefixt en gepusht naar main als bfe4a55. Site-filter op de tracks in de subquery; test/fedi-open-tenancy.test.js bewaakt het (faalt op onveranderde main met fedi_open=1). Volledige suite 627/627 groen op hetzner-ai.","dependency_count":0,"dependent_count":0,"comment_count":0}1 {"_type":"issue","id":"prutfolio-src-cke","title":"Cross-tenant lek: playlist-tak van setAudioFediOpen opende bestanden van andere sites","description":"setAudioFediOpen in src/routes/posts.js opende de [[playlist:id]]-tak zonder site-check, terwijl de track- en album-tak wel AND site_id = ? hadden. playlists.id is een globale primary key, dus een post op site A met [[playlist:x]] van site B zette de tracks van B permanent open (fedi_open is eenrichtings). Gevonden 7-8-2026 tijdens shaer-ayc. Fix: site_id-filter op de TRACKS in de subquery, plus test/fedi-open-tenancy.test.js.","notes":"BEREIKBAARHEID, en waarom we er niet verder op doorgaan (8-8, besluit Robin).\n\nNagekeken op de draaiende instances: dev = 1 site (1 god), 1 playlist, dus geen site B. beta = 2 sites met 2 verschillende eigenaren (beta/god, granbeta/member) plus site_members-rijen, maar 0 tracks en 0 playlists. Vandaag dus nergens te triggeren.\n\nBELANGRIJKER: die tweede site, de member-rol en de site_members-rijen zijn RUDIMENTEN van functionaliteit die eruit gaat. We redeneren niet langer over bereikbaarheid vanuit zulke resten in de databases -- ze zeggen niets over wat er straks nog leeft. De P1 die ik er eerst op zette was daarmee dubbel te zwaar aangezet.\n\nWat blijft staan is de fix zelf, en niet vanwege een dreiging: de playlist-tak deed iets anders dan de track- en album-tak erboven, en fedi_open is eenrichtings. Dat is een reden op zichzelf.","status":"closed","priority":1,"issue_type":"bug","owner":"roboburr@gmail.com","created_at":"2026-08-08T00:47:53Z","created_by":"Robin","updated_at":"2026-08-08T01:27:50Z","closed_at":"2026-08-08T00:48:03Z","close_reason":"Gefixt en gepusht naar main als bfe4a55. Site-filter op de tracks in de subquery; test/fedi-open-tenancy.test.js bewaakt het (faalt op onveranderde main met fedi_open=1). Volledige suite 627/627 groen op hetzner-ai.","dependency_count":0,"dependent_count":0,"comment_count":0} 2 2 {"_type":"issue","id":"prutfolio-src-aaj","title":"GitHub-distributie: canonieke repo naar GitHub + self-host release (Docker/zip)","description":"Volgorde (Robin 2026-06-21): EERST GitHub-support + canonieke code van de VPS af, DAARNA pas Docker/zip-distributie.\n\nDOEL: muzikanten kunnen Klonkt zelf hosten (WordPress-achtig), updates via GitHub i.p.v. Robins VPS.\n\nSTAP 1 — repo naar GitHub (van VPS af):\n- Canonieke bare repo staat nu op de VPS (~/git-repos/prutfolio.git). Verplaatsen/spiegelen naar een GitHub-repo (Robin is niet GitHub-vaardig -\u003e Claude zet repo+releases op).\n- KLONKT_GIT_DIR (update-functie Beheer-\u003eUpdates / klonkt-self-update.sh) ompunten naar GitHub i.p.v. lokale bare repo.\n- Robins eigen vloot (demo's/jeffree/jasonhacky) blijft werken; deploy-loop evt. naar git pull van GitHub.\n- Secrets/branding check voor publiek maken (geen .env, geen storage, geen interne notities in de repo).\n\nSTAP 2 — self-host distributie (later, was al uitgewerkt; recon gedaan):\n- Dockerfile (multi-stage node:20-bookworm) + docker-compose + .dockerignore = de 'WordPress-zip' (1 commando).\n- Quickstart-README (Docker + kale VPS met Node+pm2+Caddy).\n- Evt. one-click templates (Railway/PikaPods).\n\nSELF-HOST READINESS (geverifieerd 2026-06-21):\n- Node-app (\u003e=20), GEEN PHP -\u003e draait op VPS/Docker/PaaS, niet op shared PHP-hosting.\n- ffmpeg = MEEGEBUNDELD via ffmpeg-static (geen system-install).\n- cwebp = OPTIONEEL (ImageWebpService valt terug op origineel als 'cwebp' ontbreekt).\n- better-sqlite3 = native (npm prebuilt binary; in Docker bookworm-base voor glibc).\n- DB migreert zichzelf bij boot (57x CREATE TABLE IF NOT EXISTS/ensureColumn) -\u003e geen los migratiescript.\n- .env.example + README.md bestaan al. Premium staat default UIT (KLONKT_PREMIUM_ENABLED) -\u003e self-hoster krijgt volledige gratis app.\n- Eerste /auth/register = god, daarna dicht.\n- server.js: PORT env, listen(PORT). LET OP: check of 'ie op 0.0.0.0 bindt (nodig in Docker) -- nog verifieren.\n- Docker 29 lokaal beschikbaar voor testen.\n\nGATING/PLAN-context: zie memory project_klonkt_monetization (self-host + Patreon $10 lifetime; security/updates gratis voor iedereen, 3 modules achter Patreon).","status":"closed","priority":1,"issue_type":"feature","owner":"roboburr@gmail.com","created_at":"2026-06-21T20:29:43Z","created_by":"roboburr","updated_at":"2026-07-01T22:02:25Z","closed_at":"2026-07-01T22:02:25Z","close_reason":"Done: public GitHub repo live 2026-06-23 (roboburr/klonkt, AGPL), install.sh + klonkt.com/install, stable release channel, Docker image build+run verified 2026-07-01. Leftovers (optional KLONKT_GIT_DIR repoint, one-click PaaS templates) intentionally deferred.","dependency_count":0,"dependent_count":0,"comment_count":0} 3 3 {"_type":"issue","id":"prutfolio-src-3fl","title":"Audio: continuous playback breekt na 3-4 tracks (browser-policy / state corruption)","description":"Na fix v1 (next() unconditional play) werkt 1-\u003e2 en 2-\u003e3, maar stopt bij 3-\u003e4. Verdacht: iOS Safari autoplay-policy revoke OF audio element state-corruption na meerdere src changes. Fix: pause()+load()+play() pattern in loadTrack, error-event auto-skip naar volgende, NotAllowedError visuele hint (pulse op play-btn).","status":"closed","priority":1,"issue_type":"bug","owner":"robin@roboburr.com","created_at":"2026-05-07T22:38:42Z","created_by":"Robin","updated_at":"2026-07-02T13:39:58Z","closed_at":"2026-07-02T13:39:58Z","close_reason":"Fixed on main (421046c). Root cause: every track change did pause + src-swap + load + play, which browsers treat as a NEW playback session - background policy pauses those, and repeated element resets corrupted state. The player now appends the whole queue into one MediaSource (audio/mpeg SourceBuffer), so auto-advance is a continuous timeline with zero pause/play events. Verified in-browser: boundary cross with no play/pause pair, per-track UI correct, gapless wrap. Blob fallback remains for iOS.","dependency_count":0,"dependent_count":0,"comment_count":0} 4 4 {"_type":"issue","id":"prutfolio-src-0tg","title":"Audio: continuous playback fix — next() altijd play() ipv conditional","description":"Bug: next() checkte 'if (isPlaying) play()' maar isPlaying was al false door de pause-event die de browser firet vóór ended. Resultaat: track stopt na 1 keer. Fix: drop de conditional, roep altijd play() aan. Zelfde voor prev(). Bestand: src/assets/js/audio-player.js regels 221-230.","status":"closed","priority":1,"issue_type":"bug","assignee":"Robin","owner":"robin@roboburr.com","created_at":"2026-05-06T22:18:40Z","created_by":"Robin","updated_at":"2026-05-06T22:28:20Z","started_at":"2026-05-06T22:26:37Z","closed_at":"2026-05-06T22:28:20Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0} 5 {"_type":"issue","id":"prutfolio-src-s5w","title":"PlaylistService.generateId controleert uniekheid per site, maar playlists.id is een GLOBALE primary key","description":"src/services/PlaylistService.js generateId() zoekt een vrij id met SELECT 1 FROM playlists WHERE site_id = ? AND id = ?, terwijl het schema 'id TEXT PRIMARY KEY' is -- globaal, zonder site_id erin. Gevolg: heeft site A al playlist 'ai-covers' en maakt site B er een met dezelfde titel, dan geeft generateId gewoon 'ai-covers' terug, de INSERT knalt op de globale PK, de transactie gooit, en create() vangt dat af en geeft null. De gebruiker ziet 'aanmaken mislukt' zonder reden, en de -2 suffix die de functie juist moest leveren komt er nooit. Zelfde sleutelverschil als prutfolio-src-cke (globale id, per-site query), maar dan op het SCHRIJF-pad. Praktisch waarschijnlijker dan cke: het heeft geen kwaadwillende nodig, alleen twee sites met een gelijke albumtitel. Nog niet empirisch bevestigd, alleen uit de code gelezen.","notes":"Let op bij oppakken (8-8): dit is net als prutfolio-src-cke een CROSS-SITE bug -- hij heeft twee sites op een instance nodig. Gaat multi-site eruit, dan valt hij vanzelf weg: met een site is 'uniek per site' hetzelfde als 'globaal uniek' en botst de PK nooit. Niet oppakken zonder eerst te weten of multi-site blijft.","status":"open","priority":2,"issue_type":"bug","owner":"roboburr@gmail.com","created_at":"2026-08-08T01:23:47Z","created_by":"Robin","updated_at":"2026-08-08T01:27:52Z","dependency_count":0,"dependent_count":0,"comment_count":0} 5 6 {"_type":"issue","id":"prutfolio-src-m43","title":"Music federation phase 2: standard Audio/Playlist objects","description":"Federate hosted music as the de-facto fediverse audio objects (Funkwhale Audio/Library style) so audio platforms can find tracks/playlists by URL — a Note is invisible to their search. Also answers the playlist-search report. Phase 3.","status":"open","priority":2,"issue_type":"feature","owner":"roboburr@gmail.com","created_at":"2026-07-01T22:03:00Z","created_by":"roboburr","updated_at":"2026-07-01T22:03:00Z","dependency_count":0,"dependent_count":0,"comment_count":0} 6 7 {"_type":"issue","id":"prutfolio-src-u2e","title":"Paid posts: per-site Patreon + passkey unlock (design first)","description":"Premium feature (like downloads). Site owner configures their own Patreon app + amount in admin; readers unlock a paid post with a passkey (no account, no cookies, token in DB not traceable to a person). One-time Patreon link + refresh on de-auth. Klonkt Premium unlock stays as-is. Needs a design round before building. Also evaluate payment alternatives (OpenCollective, Open Payments). Phase 3.","status":"open","priority":2,"issue_type":"feature","owner":"roboburr@gmail.com","created_at":"2026-07-01T22:02:59Z","created_by":"roboburr","updated_at":"2026-07-01T22:02:59Z","dependency_count":0,"dependent_count":0,"comment_count":0}
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)