gabriel / muse public
.museagent.md markdown
68 lines 3.1 KB
Raw
sha256:37af4ab271a64f11d7bf14b4871ebaaf5dd68fb0247521007c6b034d35aa01be Merge branch 'fix/hub-user-read-update-path' into dev Human 9 days ago

muse — Agent Configuration

This repository is a member of a workspace. Shared workspace rules live in the parent .muse/agent.md. This file contains only muse-specific additions.

Managed by muse agent-config — regenerate adapters with muse agent-config sync.


HARD RULE — No Destructive Actions Without Explicit Permission

Under no circumstances take any destructive or irreversible action without gabriel's express permission in that conversation. This includes but is not limited to:

  • muse merge --abort — wipes all uncommitted working tree changes
  • muse reset --hard — discards commits and working tree changes
  • muse branch -D — force-deletes branches
  • muse rm / muse rm --force — deletes tracked files
  • muse checkout --force / muse checkout --ours / muse checkout --theirs
  • Any --force flag on any muse command
  • Deleting, overwriting, or resetting any file or object store entry

If you encounter a conflict, stale merge state, or dirty working tree — STOP and ask gabriel what to do. Do not attempt to resolve it yourself. Do not abort, reset, or discard anything. The cost of losing uncommitted work is catastrophic.


Repo-Specific Notes

Snapshot Design Intent — Flat Manifest is Intentional

Muse snapshots are flat path → object_id dicts covering the entire repo in one structure. This is a deliberate architectural choice, not an oversight.

Why not git's recursive tree model?

Git's tree objects provide subtree sharing: two commits that differ only in src/ reuse the same tree object for every other directory. This saves storage at the cost of requiring recursive tree traversal to reconstruct a file's path.

Muse does not use this model because the primary unit of meaning in Muse is not a directory — it is a snapshot of the entire system state. A music arrangement, its samples, its metadata, and its MIDI files are one coherent atomic thing. A genomics dataset, a 3D scene, a financial model — all of these are captured as a single indivisible state, not a hierarchy of independently meaningful subtrees.

The flat manifest reflects that: state is atomic, not hierarchical.

Storage tradeoff

Each snapshot materializes the full path list on disk. For small-to-medium repos (up to ~100k files) this is not a meaningful constraint — snapshot files are just path strings and SHA-256 IDs, not blob bytes. On the wire, delta encoding (delta_upsert/delta_remove) means only changes are transmitted regardless.

If very large file counts become a real constraint, the natural evolution is a tiered manifest: flat below a threshold, chunked or tree-structured above it. The content-addressing model and delta format would not change.

Domain agnosticism

At the storage layer, a MIDI file and a Python file are identical — both are just bytes with a path. Domain semantics live in the content of those bytes, not in how they are stored. Muse is multi-domain (code, music, genomics, 3D, financial modeling) but the object store, snapshot, and commit model are the same for all of them. Do not introduce domain-specific logic into the core storage layer.

File History 1 commit
sha256:37af4ab271a64f11d7bf14b4871ebaaf5dd68fb0247521007c6b034d35aa01be Merge branch 'fix/hub-user-read-update-path' into dev Human 9 days ago