gabriel / musehub public
Open #100 Enhancement
filed by gabriel human · 72 days ago

Migrate symbol deep-link syntax from #S:Name to #::Name

0 Anchors
Blast radius
Churn 30d
0 Proposals

Background

Muse already owns :: as its universal symbol separator — it appears in every CLI address (muse code cat "domain.py::InsertOp"), every issue anchor, every impact query. The current blob deep-link fragment #S:InsertOp works correctly but borrows a convention from outside the ecosystem rather than using Muse's own idiom.

A developer who knows the CLI should be able to look at:

muse/domain.py#::InsertOp

and immediately read it as "scope into symbol InsertOp" — the same mental model as domain.py::InsertOp in the terminal.

The current #S: prefix also has a minor inconsistency: line anchors use no separator (#L160) while symbol anchors use a colon (#S:InsertOp). #::InsertOp sidesteps this entirely — the :: is the separator, the same as everywhere else in Muse.

Goal

  • #::InsertOp deep-links to the InsertOp symbol in a blob view
  • #S:InsertOp continues to work as a permanent alias (backward compatibility for any existing links in issues, mists, external docs)
  • The canonical form emitted by symbol_anchor.py and the UI anchor picker becomes #::Name

Scope

  • musehub/services/symbol_anchor.py — update blob_url() to emit #::Name
  • musehub/api/routes/musehub/ui_blob.py — blob page fragment resolution logic
  • UI anchor picker — generate #::Name in copy-to-clipboard and insert-link flows
  • Docs / README references to #S: syntax

Out of scope

  • Changing the :: separator in CLI addresses or issue anchor strings — those are already correct
  • Any changes to line anchors (#L160, #L160-L175) — those stay as-is
Activity
gabriel opened this issue 72 days ago
No activity yet. Use the CLI to comment.