gabriel / musehub public
feat BREAKING dev
AI Agent gabriel · 125 days ago · May 7, 2026 · Diff

feat: fleet pagination with first/prev/next/last controls and TDD coverage

- Add _fetch_agent_fleet pagination: total_agents, total_pages, current_page via COUNT(DISTINCT agent_id) query; offset driven by fleet_page query param - Add /avatars/handle/{handle}.svg for unregistered agent sigils (sha256 fallback) - Redesign fleet cards as portrait profile cards with sigil, domain dots, relative timestamps, commit/repo stats - Add fleet pagination UI: first/prev/next/last icons (greyed when unavailable), n of m pages count, deep-linkable via ?fleet_page=N - Add TDD tests P1-P6 covering first page, last page, total_agents, total_pages, current_page, and single-page fleet (6 passing) - Fix Activity Canvas: normalise sha256 domain_id hashes to 'code', fix canvas cell visibility tokens for dark and light modes, remove horizontal scroll - Fix favicon cache-busting: add ?v={{ static_version }} to all four link tags

sha256:80aa028938104200661e7ea777b77ebe59297dba34ea6f5d1115fbc90d4a2484 sha
+47 ~14 −3 symbols
sha256:ad7c5ac23719efa463595a07bef2c96a8b57cbb84c96aa1adee95046c417d517 snapshot
+47
symbols added
~14
symbols modified
−3
symbols removed
0
dead code introduced
Semantic Changes 64 symbols
~ tests/test_fleet_pagination.py .py 18 symbols added
+ _IDENTITY variable variable _IDENTITY L40–44
+ _add_commit function async_function _add_commit L18–37
+ _utc function function _utc L14–15
+ AsyncSession import import AsyncSession L7–7
+ annotations import import annotations L2–2
+ blob_id import import blob_id L11–11
+ create_repo import import create_repo L10–10
+ datetime import import datetime L6–6
+ db import import db L9–9
+ math import import math L4–4
+ pytest import import pytest L5–5
+ timezone import import timezone L6–6
+ test_p1_first_page_returns_page_size_and_next_cursor function async_function test_p1_first_page_returns_page_size_and_next_cursor L51–65
+ test_p2_last_page_has_no_next_cursor function async_function test_p2_last_page_has_no_next_cursor L73–86
+ test_p3_total_agents_reflects_full_fleet function async_function test_p3_total_agents_reflects_full_fleet L94–109
+ test_p4_total_pages_rounds_up function async_function test_p4_total_pages_rounds_up L117–130
+ test_p5_current_page_reflects_offset function async_function test_p5_current_page_reflects_offset L138–154
+ test_p6_single_page_fleet function async_function test_p6_single_page_fleet L162–177
~ musehub/api/routes/musehub/ui_avatars.py .py 2 symbols added, 1 symbol modified
+ get_sigil_by_handle function async_function get_sigil_by_handle L50–87
+ hashlib import import hashlib L13–13
~ musehub/api/routes/musehub/ui_user_profile.py .py 4 symbols added, 2 symbols modified
+ _FLEET_PAGE_SIZE variable variable _FLEET_PAGE_SIZE L619–619
+ _relative_time function function _relative_time L592–616
+ fleet_more function async_function fleet_more L1075–1093
+ math import import math L16–16
~ musehub/templates/musehub/pages/profile.html .html 1 symbol added, 5 symbols modified
+ div#agent-fleet section div#agent-fleet L449–451
~ src/scss/_components.scss .scss 1 symbol added
+ sigil--sm rule .sigil--sm L207–207
~ src/scss/pages/_profile.scss .scss 21 symbols added, 3 symbols removed, 6 symbols modified
fleet-card__avatar rule .fleet-card__avatar L104–104
fleet-card__body rule .fleet-card__body L105–105
fleet-card__stat rule .fleet-card__stat L109–109
+ fleet-card__domain-dot rule .fleet-card__domain-dot L172–184
+ fleet-card__domain-dot--agent rule .fleet-card__domain-dot--agent L181–181
+ fleet-card__domain-dot--audio rule .fleet-card__domain-dot--audio L182–182
+ fleet-card__domain-dot--code rule .fleet-card__domain-dot--code L178–178
+ fleet-card__domain-dot--generic rule .fleet-card__domain-dot--generic L183–183
+ fleet-card__domain-dot--midi rule .fleet-card__domain-dot--midi L179–179
+ fleet-card__domain-dot--mist rule .fleet-card__domain-dot--mist L180–180
+ fleet-card__domains rule .fleet-card__domains L165–170
+ fleet-card__identity rule .fleet-card__identity L145–147
+ fleet-card__sigil rule .fleet-card__sigil L128–132
+ fleet-card__sigil-placeholder rule .fleet-card__sigil-placeholder L134–143
+ fleet-card__stat-label rule .fleet-card__stat-label L207–212
+ fleet-card__stat-row rule .fleet-card__stat-row L194–198
+ fleet-card__stat-val rule .fleet-card__stat-val L200–205
+ fleet-card__time-row rule .fleet-card__time-row L224–226
+ fleet-card__times rule .fleet-card__times L214–222
+ fleet-pagination rule .fleet-pagination L228–234
+ fleet-pagination__btn rule .fleet-pagination__btn L236–255
+ fleet-pagination__btn--disabled rule .fleet-pagination__btn--disabled L249–254
+ fleet-pagination__btn:hover rule .fleet-pagination__btn:hover L247–247
+ fleet-pagination__count rule .fleet-pagination__count L257–264
~ strong
← Older Oldest on dev
All commits
Newer → Latest on dev

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:80aa028938104200661e7ea777b77ebe59297dba34ea6f5d1115fbc90d4a2484 --body "your comment"