Closed
#79
Return issue URL and base64 ID in hub issue create response
0
Anchors
—
Blast radius
—
Churn 30d
0
Proposals
Return Mist URL and Base64 Issue ID in hub issue create Response
Current Behavior
muse hub issue create returns the issueId as a full sha256:<hex> string in --json output:
{
"issueId": "sha256:9902b5e3cee06134bb119359cfccc01e402e342863254cc56b25149e294f1d7f",
"number": 78,
...
}
The --json response does not include a URL to the created issue. The human-readable (non---json) output is unclear on whether it surfaces a URL either — but a URL is the single most useful thing a user needs after creating an issue.
Expected Behavior
The success response (both --json and human-readable) should include:
url— the fully-qualified URL to the issue on the hub, e.g.:https://staging.musehub.ai/gabriel/muse/issues/78issue_id_b64— the base64url-encoded issue ID, e.g.:mQLW4874...The raw
sha256:<hex>form is unwieldy to copy-paste into API calls, browser address bars, or agent prompts. Base64url is ~44 chars vs. 71 for hex.
--json shape
{
"issueId": "sha256:9902b5e3...",
"issue_id_b64": "mQLW4874...",
"url": "https://staging.musehub.ai/gabriel/muse/issues/78",
"number": 78,
...
}
Human-readable output
✔ Issue #78 created
https://staging.musehub.ai/gabriel/muse/issues/78
The URL should be the last line printed so it is trivially pipe-able or click-able from a terminal.
Scope
muse hub issue create(primary)- Audit:
muse hub proposal create,muse hub repo create, and any otherhub … createcommands that return object IDs — apply the same pattern consistently
Acceptance Criteria
--jsonoutput includesurlpointing to the created issue on the hub--jsonoutput includesissue_id_b64(base64url, no padding)- Human-readable output prints the URL on the last line
- Existing
issueId(sha256:<hex>) field is preserved — no breaking change - Same treatment applied to
hub proposal createandhub repo create
Activity1
closed this issue
3 days ago
Implemented and deployed to staging.
Changes made:
musehub/services/musehub_issues.py:create_issuenow acceptsurl_prefixand passes it to_to_issue_response, populatingIssueResponse.urlmusehub/api/routes/musehub/issues.py:create_issueroute computesurl_prefixand passes it to the servicemusehub/services/musehub_proposals.py: same pattern forcreate_proposalmusehub/api/routes/musehub/proposals.py: same pattern — addedrequest: Request, computesurl_prefixmuse/cli/commands/hub/issues.py:--jsonoutput now includesurlandissueIdB64(base64url, no padding)muse/cli/commands/hub/proposals.py:--jsonoutput now includesurlandproposalIdB64muse/cli/commands/hub/repos.py:--jsonoutput now includesurlandrepoIdB64Verified on staging:
muse hub issue create --jsonreturns both fields correctly.