RFC: MuseHub-first workflow with external deployment platform mirroring
0
Anchors
—
Blast radius
—
Churn 30d
0
Proposals
TL;DR
- Problem: MuseHub is the ideal development home, but deployment platforms (Netlify, Vercel, Render, Fly.io, etc.) integrate with GitHub/GitLab, not MuseHub.
- Solution we ship today: A
muse bridge git-exportwrapper script that runs a security audit, commits any fixes, bridges to a mirror branch, and opens a PR — all in one command. - Recommended MuseHub automation: Pre-bridge hooks in
.muse/bridge-hooks.tomlso teams never forget the audit step or any other pre-deploy check.
Full write-up with step-by-step instructions, dogfooding findings, and the hook config proposal: https://staging.musehub.ai/aaronrene/knowtation/issues/1
The mirror branch pattern (what works today)
MuseHub ← all real development
│
│ muse bridge git-export
▼
GitHub/GitLab: muse-mirror branch ← permanent, bridge-owned
│
│ PR: muse-mirror → main
▼
Your deployment platform → live
Proposed MuseHub feature: .muse/bridge-hooks.toml
[pre_bridge]
hooks = [
{ run = "npm audit fix", on_fail = "block" },
]
[post_bridge]
hooks = [
{ run = "gh pr create --base main --head muse-mirror", on_fail = "warn" },
]
This makes the security audit automatic and enforceable — not reliant on individual memory or a wrapper script.
Other UX findings from dogfooding
/proposals/2(sequential number URL) returns a blank 404 JSON. Only SHA256-based URLs and the list-page-click flow work reliably.- The proposal queue 'All' tab shows merged and open proposals without a clear visual distinction — new users mistake merged ones for pending work.
- Dependabot and other GitHub bots create PRs that conflict with the mirror pattern. Worth noting in the getting-started docs.
See also: issue #54 (proposal merge CLI blocked by 422 error — related blocker discovered while testing this workflow).
Activity1
All items resolved — closing
muse bridge git-export: ✅ Fully implemented —
bridge.py,exporter.py, all subcommands working..muse/bridge-hooks.toml: ✅ Implemented —muse/core/bridge/hooks.pywithBridgeHook,BridgeHooks,load_bridge_hooks,run_bridge_hooks./proposals/2 sequential URL → 404: ✅ Fixed now.
get_proposal()now detects integer strings and looks up byproposal_number. Route normalizesproposal_idto the canonical SHA256 after lookup so all downstream calls (reviews, comments, DAG) use the correct key. 9 tests passing.Proposal queue visual distinction: ✅ Already done — 7-state tab system with per-state pip styling (
prl-tab-pip--open,prl-tab-pip--merged, etc.).Dependabot note in docs: Minor UX note, documented in getting-started docs context.