Skip to content

Prep for v1.7#92

Merged
fboucher merged 34 commits intomainfrom
dev
Mar 26, 2026
Merged

Prep for v1.7#92
fboucher merged 34 commits intomainfrom
dev

Conversation

@fboucher
Copy link
Copy Markdown
Owner

This pull request introduces several improvements across the build pipeline, containerization, and front-end functionality. Notably, it enhances Docker image tagging and workflow, adds support for server-sent events (SSE) overlays in the UI, updates dependencies, and improves documentation for container usage. It also introduces configuration for merge strategies and external MCP integration.

Build and Deployment Improvements:

  • Docker image tagging in both release and development workflows is now more robust and semantic, using major, minor, and full version tags for releases and a fixed "beta" tag for dev builds. This also modernizes the GitHub Actions output syntax. (.github/workflows/release-docker-image.yml, .github/workflows/simple-docker-image.yml) [1] [2]
  • The Dockerfile now ensures required directories are created and permissions set after source copy, preventing issues with runtime file access. It also ensures all dependencies are installed and exposes the correct ports.

Frontend and User Experience Enhancements:

  • Adds SSE (Server-Sent Events) support to the overlay, enabling real-time display of stream notes and events in the UI. This addresses a previous issue (Save Results in... #15) and improves interactivity for viewers. (src/public/index.html)
  • Removes unused or broadcaster-only chat commands from the overlay script, simplifying the client-side logic. (src/public/index.html)

Project Configuration and Documentation:

  • Updates the README.md to clarify database initialization, and provides improved instructions for running the container with both Docker and Podman, including correct volume mounts for persistent storage.
  • Sets up union merge strategies for append-only team state files, reducing merge conflicts in collaborative workflows. (.gitattributes)
  • Adds MCP server configuration for GitHub integration, enabling external management or automation features. (.copilot/mcp-config.json)

Dependencies and Versioning:

  • Updates the project version to 1.7.3-beta and adds the @tursodatabase/database dependency, preparing for future database-related enhancements. (src/package.json) [1] [2]

fboucher and others added 30 commits March 14, 2026 13:14
Migrates session and metadata storage from JSON files to LibSQL/SQLite. Introduces a new administrative dashboard for real-time stream management, including session controls, todos, and reminders.
…ime effects

Adds support for stream titles and integrates task/reminder management into the session view. Implements a polling-based effect system allowing the admin panel to trigger live visual and audio cues on the stream view.
- When session exists and ended_at is null: active: true
- When session exists and ended_at is set: active: false
- No-session case already returns { active: false }

Fixes Bug #4 from Trenton's audit.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
FIX #1 #2: remove dead startStreamBtn/endStreamBtn event listeners
FIX #3 #4: remove dead projectInput/streamTitleInput references
FIX #5: loadActiveSession uses GET /api/stream/status; start/stop buttons use POST /api/stream/start|stop; add input validation for Start btn
FIX #6: remove renderTodos() targeting non-existent #todosList
FIX #7: remove renderReminders() targeting non-existent #remindersList
FIX #8: wire notes to GET/POST/DELETE /api/notes
FIX #9: wire todos to GET/POST/PATCH/DELETE /api/todos
FIX #10: wire reminders to GET/POST/DELETE /api/reminders
FIX #11: fix todo status default 'pending' -> 'new' in index.js
FIX #12: replace db.loadSessionData() (server module) with fetch('/api/session/:id') in loadDashboardStats()
FIX #13: delete button present in renderSessionReminders()
FIX #14: add per-note 'Show on Stream' button calling POST /api/stream/overlay
FIX #15: add SSE EventSource subscription in index.html for overlay note events

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Orchestration logs for Romero, Darlene (respawn), Trenton, and Romero
(lightweight). Session log documenting full workflow. Merged decisions
from inbox into decisions.md. Updated agent history files with session
outcomes.

Key results:
- 16 new REST API endpoints (stream control, notes/todos/reminders CRUD,
  SSE overlay)
- 15 frontend bugs identified and fixed
- Source of truth shifted from in-memory JSON to SQLite database
- Real-time SSE overlay support added
- Admin panel now fully functional

Files staged:
- .squad/orchestration-log/ (4 agent logs)
- .squad/log/ (1 session log)
- .squad/decisions.md (merged inbox decisions)
- .squad/agents/*/history.md (updated with session context)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… .gitignore

- db.js: Convert all two-arg c.execute(sql, args) calls to proper
  { sql, args } object form required by @libsql/client. The two-arg
  form silently drops the args parameter, causing parameterized queries
  with ? placeholders to fail. This broke getSessionById, loadSessionData
  (all SELECT queries), and saveSessionData (all DELETE queries).
  Root cause: /loadfromfile was returning 500 due to the thrown error,
  so the stream overlay never received todos data.

- .gitignore: Add *.db, *.db-shm, *.db-wal and src/io/cloudbot.db
  to prevent the SQLite database file from being committed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ories

Agents (2026-03-15T14:02:44Z):
- Agent-8 (Darlene): Verified stop button state already correct
- Agent-9 (Romero): Fixed 10 @libsql/client parameterized query calls, restored overlay todos
- Agent-10 (Darlene): Added version/build footer to admin panel sidebar

Changes:
- Updated Darlene history: Stop button verification, version footer
- Updated Romero history: Query bug fix details, gitignore additions
- Merged inbox decisions into decisions.md (3 entries)
- Deleted decision inbox files

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace @libsql/client with @tursodatabase/database
- Remove DATABASE_URL / getDbUrl() cloud fallback
- Rewrite all queries to new async API (prepare/run/get/all)
- All DB calls properly await the async Turso engine
- Smoke tested: init, session CRUD, todos verified OK

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- GET /api/export: generate downloadable markdown of active session
- /api/session & /api/stream/status: return full session object
  (nested notes, todos, reminders)
- Fix 2 legacy @libsql/client execute() calls in index.js
- Move Save/Export buttons into Stream Control card
- Fix inverted Show/Hide Todo toggle (admin.html)
- Add 5s auto-polling for notes/todos/reminders in admin panel
- Add commands audit planning doc (.squad/planning/)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Task 1 — Fix GET /api/export:
- Fixed todo format: cancelled items now render as '~~description~~'
- Fixed reminder format: now '**name**: message' (was 'name: message (interval: Nmin)')
- Endpoint already had correct Content-Disposition/Content-Type headers

Task 2 — Fix project/title persistence:
- loadActiveSession() was reading data.sessionId/projectName/streamTitle (flat fields
  that don't exist); /api/stream/status returns { session: { id, project_name, ... } }
- Fixed to read from data.session.* so currentSession.id is correctly populated
- Added PATCH /api/session/:id endpoint to update project_name/stream_title

Task 3 — Fix Save button:
- saveCurrentSession() guarded on streamSessionData which is always null
  (legacyData.data no longer exists on /api/session response)
- Now guards on currentSession, reads input fields, calls PATCH /api/session/:id
- Shows showFeedback('Session saved!') on success

Task 3 — Fix Export button:
- Simplified handler to window.location.href = '/api/export'
- Browser handles Content-Disposition: attachment download natively
- Added guard: shows feedback if no active session

Task 4 — Remove legacy JSON file I/O (Phase 2):
- /savetofile: removed fs.writeFile() JSON dump; DB-only now
- /loadfromfile: removed fs.existsSync/readFileSync JSON fallback;
  returns empty default structure when no active DB session

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix /api/export markdown (correct todo/reminder format, includes notes)
- Fix field path bug: loadActiveSession() now reads session.id correctly
- Add PATCH /api/session/:id for project name / stream title updates
- Rewire Save button to use currentSession (was silently no-oping)
- Remove JSON file I/O from /savetofile and /loadfromfile (DB-only)
- Fix text contrast on todo/reminder list items in admin panel
- Form fields stay populated+disabled after session start
- Export button triggers blob file download (not page navigation)
- Wire !start/!stop in cloudbot.js to call REST session endpoints

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… panel

- Add /api/version endpoint reading version from package.json + BUILD_DATE at startup
- Add upsertUser() and getSessionUsers() to db.js
- Add GET /api/users and POST /api/users/score endpoints
- Include users in /api/session and /api/stream/status responses
- Add persistUserScore() helper in cloudbot.js (fire-and-forget, called on land/drop)
- Add dynamic version footer in admin.html (reads /api/version on load)
- Add Leaderboard card in Current Session tab with 5s polling

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Admin panel immediately restores notes/todos/reminders/scores on load
  when an active session exists in the DB
- Stream overlay calls loadSessionFromDb() immediately on DOMContentLoaded
  (no longer waits 5s for first poll tick)
- Fix: loadSessionData() in db.js was reading Notes from stale JSON blob;
  now queries notes table directly
- /api/stream/status, /api/session, /loadfromfile all verified to return
  complete session data from DB with no JSON file fallbacks
- Merged .squad/decisions/inbox/ → decisions.md and deleted inbox files
- Added orchestration logs: 2026-03-17T17:56:31Z-romero.md and -darlene.md
- Added session log: 2026-03-17T17:56:31Z-coldboot-db-sourceoftruth.md
- Updated agent histories with Decision 30 (Romero) and 31-32 (Darlene)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace inline project/title inputs with "Configure Session" modal
  to prevent polling from resetting user input mid-typing
  use API-call → immediate DB refresh pattern instead
- Export now saves show-notes-{id}.md to src/io/ AND downloads in browser
- Export includes leaderboard section, all data sourced from DB
- Cold-boot correctly sets projectName/streamTitle JS vars from API
  and populates read-only display area on page load

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add project_url field to stream_sessions table (migration + all APIs)
- Configure Session modal now includes optional GitHub URL input field
- Export now guarantees src/io/ exists before writing (mkdirSync recursive)
- Export wrapped in try/catch so failures surface in server logs
- Show notes markdown includes stream title, project URL, proper checkboxes
- Cold-boot reads project_url and displays as clickable link in admin panel

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- GitHub URL format is always https://github.com/FBoucher/{projectName}
- StreamNoteStart() in cloudbot.js now sends projectUrl automatically
- Remove GitHub URL input field from Configure Session modal
- Remove sessionProjectUrl variable — URL computed inline everywhere
- Start button, PATCH save, and session display all auto-derive URL
- Modal now has exactly two fields: Project Name + Stream Title

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…toggle

- Persist Todo and Reminder status updates to the database in real-time
- Auto-generate show notes markdown file when stopping a stream session
- Allow exporting historical sessions from the admin panel history table
- Implement manual project banner toggle with auto-timer override
- Enhance cold-boot loading to restore full session state and reminder intervals
…nd ensure writable directories are created correctly
…reminders, and download functionality; update export API handling in cloudbot.js
…et version outputs and simplify simple-docker-image.yml by removing unnecessary steps.
@fboucher fboucher merged commit 4d184f1 into main Mar 26, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant