gabriel / muse public
.museattributes toml
162 lines 5.9 KB
Raw
sha256:2eaa5d95f9d9383498e76947410a26e5a3ba23d182f339910c424cf88fad412b fix: try fetch/presign before fetch/mpack to avoid Cloudfla… Sonnet 4.6 patch 7 days ago
1 # .museattributes — merge strategy overrides for this repository.
2 # Documentation: docs/reference/muse-attributes.md
3 #
4 # Format: TOML with an optional [meta] header and an ordered [[rules]] array.
5 # Rules are evaluated top-to-bottom after sorting by priority (descending).
6 # The first matching rule wins. Unmatched paths fall back to "auto".
7 #
8 # ─── Strategies ───────────────────────────────────────────────────────────────
9 #
10 # ours Take the current-branch (left) version; remove from conflicts.
11 # theirs Take the incoming-branch (right) version; remove from conflicts.
12 # union Include all additions from both sides. Deletions are honoured
13 # only when both sides agree. Best for independent element sets
14 # (MIDI notes, symbol additions, import sets, genomic mutations).
15 # Falls back to "ours" for binary blobs.
16 # base Revert to the common ancestor; discard changes from both branches.
17 # Use this for generated files, lock files, or pinned assets.
18 # auto Default — let the three-way merge engine decide.
19 # manual Force the path into the conflict list for human review, even when
20 # the engine would auto-resolve it.
21 #
22 # ─── Rule fields ──────────────────────────────────────────────────────────────
23 #
24 # path (required) fnmatch glob against workspace-relative POSIX paths.
25 # dimension (required) Domain axis name (e.g. "notes", "symbols") or "*".
26 # strategy (required) One of the six strategies above.
27 # comment (optional) Free-form note explaining the rule — ignored at runtime.
28 # priority (optional) Integer; higher-priority rules are tried first.
29 # Default 0; ties preserve declaration order.
30
31 [meta]
32 domain = "code" # must match the "domain" field in .muse/repo.json
33
34 # ─── Active rules ─────────────────────────────────────────────────────────────
35
36 [[rules]]
37 path = "muse/core/**"
38 dimension = "*"
39 strategy = "auto"
40 comment = "Core store and object model — genuine conflicts surface naturally; pure additions merge clean."
41 priority = 100
42
43 [[rules]]
44 path = "docs/**"
45 dimension = "*"
46 strategy = "union"
47 comment = "Documentation additions from both branches are always welcome."
48 priority = 50
49
50 [[rules]]
51 path = "tests/**"
52 dimension = "symbols"
53 strategy = "union"
54 comment = "Test additions from both branches are safe to accumulate."
55 priority = 40
56
57 [[rules]]
58 path = "muse/cli/commands/**"
59 dimension = "imports"
60 strategy = "union"
61 comment = "Import sets in command modules are independent — accumulate both sides."
62 priority = 30
63
64 [[rules]]
65 path = "pyproject.toml"
66 dimension = "*"
67 strategy = "manual"
68 comment = "Project config changes need human review — dependency changes must not be silently discarded."
69 priority = 20
70
71 [[rules]]
72 path = "*.md"
73 dimension = "*"
74 strategy = "union"
75 comment = "Markdown docs — union keeps prose additions from both branches."
76 priority = 10
77
78 # ─── MIDI domain examples ─────────────────────────────────────────────────────
79 # [[rules]]
80 # path = "drums/*"
81 # dimension = "*"
82 # strategy = "ours"
83 # comment = "Drum tracks are always authored on this branch."
84 # priority = 20
85 #
86 # [[rules]]
87 # path = "keys/*.mid"
88 # dimension = "pitch_bend"
89 # strategy = "theirs"
90 # comment = "Remote always has the better pitch-bend automation."
91 # priority = 15
92 #
93 # [[rules]]
94 # path = "stems/*"
95 # dimension = "notes"
96 # strategy = "union"
97 # comment = "Unify note additions from both arrangers; let the engine merge."
98 #
99 # [[rules]]
100 # path = "mixdown.mid"
101 # dimension = "*"
102 # strategy = "base"
103 # comment = "Mixdown is generated — always revert to ancestor during merge."
104 #
105 # [[rules]]
106 # path = "master.mid"
107 # dimension = "*"
108 # strategy = "manual"
109 # comment = "Master track must always be reviewed by a human before merge."
110
111 # ─── Code domain examples ─────────────────────────────────────────────────────
112 # [[rules]]
113 # path = "src/generated/**"
114 # dimension = "*"
115 # strategy = "base"
116 # comment = "Generated code — revert to base; re-run codegen after merge."
117 # priority = 30
118 #
119 # [[rules]]
120 # path = "src/**/*.py"
121 # dimension = "imports"
122 # strategy = "union"
123 # comment = "Import sets are independent; accumulate additions from both sides."
124 #
125 # [[rules]]
126 # path = "tests/**"
127 # dimension = "symbols"
128 # strategy = "union"
129 # comment = "Test additions from both branches are always safe to combine."
130 #
131 # [[rules]]
132 # path = "src/core/**"
133 # dimension = "*"
134 # strategy = "manual"
135 # comment = "Core module changes need human review on every merge."
136 # priority = 25
137 #
138 # [[rules]]
139 # path = "package-lock.json"
140 # dimension = "*"
141 # strategy = "ours"
142 # comment = "Lock file is managed by this branch's CI; ignore incoming."
143
144 # ─── Generic / domain-agnostic examples ───────────────────────────────────────
145 # [[rules]]
146 # path = "docs/**"
147 # dimension = "*"
148 # strategy = "union"
149 # comment = "Documentation additions from both branches are always welcome."
150 #
151 # [[rules]]
152 # path = "config/secrets.*"
153 # dimension = "*"
154 # strategy = "manual"
155 # comment = "Secrets files require manual review — never auto-merge."
156 # priority = 100
157 #
158 # [[rules]]
159 # path = "*"
160 # dimension = "*"
161 # strategy = "auto"
162 # comment = "Fallback: let the engine decide for everything else."
File History 1 commit
sha256:2eaa5d95f9d9383498e76947410a26e5a3ba23d182f339910c424cf88fad412b fix: try fetch/presign before fetch/mpack to avoid Cloudfla… Sonnet 4.6 patch 7 days ago