From 77edf0539c85ba6f645a8a42311bade015075a34 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sun, 17 May 2026 22:08:19 -0400 Subject: [PATCH] Add Skald hard fork plan --- todo.txt | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 todo.txt diff --git a/todo.txt b/todo.txt new file mode 100644 index 0000000..0e6e2ad --- /dev/null +++ b/todo.txt @@ -0,0 +1,238 @@ +# Skald Hard Fork - Master TODO +# +# Goal: +# Turn this Galene-derived repository into Skald: a new, audio-only, +# hall-based conferencing server. This is a hard fork, so compatibility with +# Galene names, URLs, video behavior, and recording format is intentionally +# not the default. +# +# Legend: +# - item = needs doing +# + item = implemented, needs testing +# X item = tested and done +# +# Non-negotiable target state: +# - Project name is Skald everywhere. +# - Halls replace groups/rooms everywhere user-facing and in internal code +# where practical. +# - Video is removed, not hidden. +# - Incoming video is rejected. +# - The browser UI is audio-only and accessible. +# - Recordings are single mixed Ogg Opus audio files. +# - No legacy Galene compatibility paths or fallback shims unless explicitly +# added later by choice. + +# ============================================================================ +# PHASE 0: BASELINE INVENTORY AND GUARDRAILS +# ============================================================================ + +- Record the current upstream/fork point in CHANGES or a new fork note +- Capture current baseline: `go test ./...` result before behavior changes +- Capture current baseline: `go build ./...` result before behavior changes +- Inventory generated/static assets, including static/example and third-party assets +- Inventory all public URLs: /group/, /public-groups.json, /recordings/, /galene-api/ +- Inventory all config/data paths: groups/, data/, recordings/, galenectl.json +- Inventory all Galene binary/service names in docs, scripts, examples, and tests +- Decide whether existing stored data will be migrated manually or treated as incompatible +- Keep the old LICENSE intact and preserve required attribution + +# ============================================================================ +# PHASE 1: FOUNDATION AND TOTAL REBRANDING +# ============================================================================ + +- Rename Go module: github.com/jech/galene -> git.stormux.org/storm/skald +- Update all internal Go import paths across source and tests +- Rename galene.go -> skald.go and keep the main package entrypoint working +- Rename galenectl/ directory and binary to skaldctl/ +- Rename static/galene.css -> static/skald.css +- Rename static/galene.js -> static/skald.js +- Rename static/galene.html -> static/skald.html +- Update webserver static serving to load skald.html and renamed assets +- Update all HTML, JS, CSS, docs, tests, and examples that reference renamed assets +- Rename galene-*.md docs to skald-*.md +- Replace "Galene", "Galène", and "galene" with "Skald" and "skald" where they refer to this project +- Keep historical upstream references only where they are attribution, changelog history, or license context +- Rename default binary, service, and install examples from galene to skald +- Rename galenectl config file to skaldctl.json +- Update CHANGES with Skald fork point and first Skald development section +- Verify `go test ./...` compiles after the pure project rename pass +- Search for remaining Galene names and classify each survivor as attribution/history or a bug + +# ============================================================================ +# PHASE 2: HALL TERMINOLOGY AND DATA MODEL +# ============================================================================ + +- Rename Go package group/ to hall/ if the package-wide rename stays tractable +- Rename package declarations, types, variables, funcs, tests, and comments from group to hall +- Rename Group type to Hall and update all compile errors intentionally +- Rename group description files/concepts to hall description files/concepts +- Rename default directory flag: -groups -> -halls +- Rename default data directory: groups/ -> halls/ +- Rename public listing concept from public groups to public halls +- Rename subgroups to subhalls everywhere, including JSON fields and commands +- Rename auto-subgroups -> auto-subhalls +- Rename allow-subgroups -> allow-subhalls +- Rename include-subgroups -> include-subhalls +- Rename group action names to hall action names where exposed to clients +- Rename chat/help commands such as /subgroups to /subhalls +- Update tests to use generic placeholder names, not real usernames +- Verify no user-facing "group", "groups", "room", or "rooms" remain except attribution/history +- Verify old group JSON/config paths are not silently accepted unless explicitly reintroduced later + +# ============================================================================ +# PHASE 3: URLS, API, PROTOCOL, AND CONTROL TOOL +# ============================================================================ + +- Rename browser hall URLs from /group/name/ to /hall/name/ +- Rename /public-groups.json to /public-halls.json +- Rename /galene-api/ to /skald-api/ +- Rename API collection paths from .groups to .halls +- Rename protocol join fields from group to hall +- Rename protocol callbacks/events from joined group semantics to joined hall semantics +- Update static/protocol.js public API: ServerConnection.join and related callbacks +- Update static/management.js to use /skald-api/v0/.halls/ +- Update static/mainpage.js to open /hall/ URLs and fetch /public-halls.json +- Update stats endpoint naming only if it exposes Galene/group terminology +- Update skaldctl command names: create-hall, update-hall, delete-hall, list-halls +- Update skaldctl flags: -hall, -include-subhalls, -auto-subhalls, etc. +- Update skaldctl help text and error messages +- Update API and webserver tests for /hall/ and /skald-api/ +- Verify old /group/, /public-groups.json, /galene-api/, and .groups paths fail clearly +- Verify protocol backward compatibility with Galene is intentionally broken + +# ============================================================================ +# PHASE 4: BACKEND - STRIP VIDEO COMPLETELY +# ============================================================================ + +- Remove video codec constants and helpers from codecs/ package +- Remove or rewrite video-only codec tests +- Strip video/vp8, video/vp9, video/av1, and video/h264 from SDP negotiation +- Ensure audio/opus remains negotiated correctly +- Reject incoming video m-lines/transceivers at WebRTC peer connection setup +- Reject or close incoming video tracks if a browser still sends them +- Ensure rejection is explicit in logs without crashing the hall +- Remove outgoing video track routing from rtpconn/ and hall/ +- Remove simulcast and SVC handling +- Remove video bandwidth estimation and video throughput selection +- Remove video-specific RTCP behavior such as PLI/FIR/keyframe requests +- Remove screenshare backend support +- Remove presentation/file-as-video support if it depends on video tracks +- Remove background blur support and background-blur-worker.js from the served app +- Remove video fields from hall descriptions, stats, API responses, and protocol docs +- Check WHIP/WHEP-style endpoints for video assumptions and either make audio-only or remove +- Ensure browsers that request audio+video get a working audio-only session or a clear video rejection +- Verify two browser clients can join one hall and exchange audio only +- Verify a client attempting camera or screenshare cannot publish video + +# ============================================================================ +# PHASE 5: FRONTEND - AUDIO-ONLY USER EXPERIENCE +# ============================================================================ + +- Remove all