gabriel / musehub public
fix BREAKING task/ssr-visibility-gate #1 / 1
AI Agent gabriel · 8 hours ago · Jun 12, 2026 · Diff

fix: enforce repo visibility gate on all SSR route handlers (issue #90)

All 14 repo-scoped ui_*.py route handlers previously served private repos to anonymous browser requests with HTTP 200. _resolve_repo and _resolve_repo_full in _ui_helpers.py now accept an optional claims: MSignContext | None parameter and raise HTTP 404 when repo.visibility != 'public' and claims is None.

Every SSR handler threads Depends(optional_token) through to the resolver so authenticated CLI/API callers can still reach their own private repos.

ui_repo_settings.py and ui_sessions.py use require_valid_token (not optional) and add a claims.handle == owner check (403 for non-owners) since those pages expose owner-only configuration and session telemetry.

Pre-launch checklist corrected: the SSR visibility item was falsely marked done.

sha256:e17dff4303a5885a1a61af6b39594fe316aeb62821bad17ccb66c52128a315f5 sha
+27 ~59 symbols
15 changed · 969 in snapshot files
sha256:9775d5977e31923046eab672c7c8b496ecdbf3353057a5860193daa41c3e6502 snapshot
+27
symbols added
~59
symbols modified
15
files changed
969
files in snapshot
0
dead code introduced
Semantic Changes 86 symbols
+ docs/
+ src/
+ tests/
+ tools/
~ musehub/api/routes/musehub/_ui_helpers.py .py 1 symbol added, 2 symbols modified
+ MSignContext import import MSignContext L16–16
~ musehub/api/routes/musehub/ui_agents.py .py 2 symbols added, 5 symbols modified
+ TokenClaims import import TokenClaims L20–20
+ optional_token import import optional_token L20–20
~ musehub/api/routes/musehub/ui_blame.py .py 2 symbols added, 1 symbol modified
+ TokenClaims import import TokenClaims L52–52
+ optional_token import import optional_token L52–52
~ musehub/api/routes/musehub/ui_blob.py .py 2 symbols added, 1 symbol modified
+ TokenClaims import import TokenClaims L24–24
+ optional_token import import optional_token L24–24
~ musehub/api/routes/musehub/ui_commits.py .py 2 symbols added, 3 symbols modified
+ TokenClaims import import TokenClaims L24–24
+ optional_token import import optional_token L24–24
~ musehub/api/routes/musehub/ui_issues.py .py 2 symbols added, 3 symbols modified
+ TokenClaims import import TokenClaims L22–22
+ optional_token import import optional_token L22–22
~ musehub/api/routes/musehub/ui_proposals.py .py 2 symbols added, 5 symbols modified
+ TokenClaims import import TokenClaims L21–21
+ optional_token import import optional_token L21–21
~ musehub/api/routes/musehub/ui_releases.py .py 2 symbols added, 4 symbols modified
+ TokenClaims import import TokenClaims L22–22
+ optional_token import import optional_token L22–22
~ musehub/api/routes/musehub/ui_repo.py .py 2 symbols added, 1 symbol modified
+ TokenClaims import import TokenClaims L21–21
+ optional_token import import optional_token L21–21
~ musehub/api/routes/musehub/ui_repo_settings.py .py 2 symbols added, 2 symbols modified
+ TokenClaims import import TokenClaims L18–18
+ require_valid_token import import require_valid_token L18–18
~ musehub/api/routes/musehub/ui_sessions.py .py 2 symbols added, 2 symbols modified
+ TokenClaims import import TokenClaims L16–16
+ require_valid_token import import require_valid_token L16–16
~ musehub/api/routes/musehub/ui_symbols.py .py 2 symbols added, 2 symbols modified
+ TokenClaims import import TokenClaims L19–19
+ optional_token import import optional_token L19–19
~ musehub/api/routes/musehub/ui_tree.py .py 2 symbols added, 2 symbols modified
+ TokenClaims import import TokenClaims L21–21
+ optional_token import import optional_token L21–21
Files Changed
~15
969 in snapshot
← Older Oldest on task/ssr-visibility-gate
All commits
Newer → Latest on task/ssr-visibility-gate

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:e17dff4303a5885a1a61af6b39594fe316aeb62821bad17ccb66c52128a315f5 --body "your comment"