{"id":"cc43fdca-9c56-4f8b-b584-d2f0ffc2ce47","shortId":"sfYy6F","kind":"skill","title":"melt","tagline":"This skill should be used when a git merge, rebase, or cherry-pick has produced conflicts and the user wants them resolved — phrases like \"melt the conflicts\", \"fix the merge conflicts\", \"resolve the rebase conflicts\", \"what's conflicting after the merge\", \"/melt\", \"fix the cherr","description":"# /melt\n\nUse this skill to resolve git merge, rebase, or cherry-pick conflicts using the structural cascade: **mergiraf → rerere → kdiff3**. Each tool handles what the previous could not.\n\nDo not use it for general git operations without conflicts (those go to a `commit` or `gh` skill) or when no conflict markers are present.\n\n## File IO delegation\n\n`melt` orchestrates the resolution chain via bash and the helper scripts. For per-file inspection or manual edits, delegate to the cheez-* skills:\n\n- **`/cheez-search`** — locate conflict markers or related symbols across the tree.\n- **`/cheez-read`** — inspect conflicted files, view conflict hunks, list directory contents.\n- **`/cheez-write`** — apply hash-anchored resolutions when bash flows are not enough.\n\nThe bash-driven flows below cover the bulk of resolution. Drop into the cheez-* skills only when you need to inspect or rewrite a specific file by hand.\n\n## Resolution chain\n\n| Stage | Tool | What it does | When it runs |\n| --- | --- | --- | --- |\n| 1 | `mergiraf` | Tree-sitter structural merge of base / ours / theirs. Independent additions merge cleanly even when text merge would conflict. Falls back to text merge on parse failure. | Automatically as a git merge driver, or via `batch-resolve.py`. |\n| 2 | `git rerere` | Replays a previously recorded human resolution for the same conflict signature. | After mergiraf, especially during long rebases where conflicts recur. |\n| 3 | `kdiff3` | Manual 3-way diff for what mergiraf and rerere could not resolve. | Launched via `git mergetool`. |\n\n## Protocol\n\n### 0. Squash-residue check\n\nRun this before the conflict summary. If the branch was squash-merged into base, mergiraf cannot help — the right answer is to abort and re-cherry-pick the unique commits.\n\n```bash\npython3 skills/melt/scripts/detect-squash-residue.py\n```\n\nIf the verdict is `SQUASH-MERGED`, surface the printed remedy to the user verbatim and stop the cascade. The remedy is destructive (`git reset --hard`) and must be copy-pasted by the user, not auto-applied. Flags:\n\n- `--base` — base ref to compare against (default: `origin/main`).\n- `--branch` — branch to check (default: current).\n- `--json` — structured output for scripting.\n\nVerdict semantics:\n\n- `SQUASH-MERGED` (via `gh-api`) — PR found and at least one local commit's SHA matched the PR; cherry-pick list derived from the unmatched (post-squash) commits.\n- `SQUASH-MERGED` (via `local-synth`) — detected offline; cherry-pick list must be reviewed by hand.\n- `not-detected` — proceed to the cascade.\n- `not-applicable` — on the base branch.\n\n### 1. Diagnose\n\nRun the summary script next; it replaces ad-hoc `grep -n '<<<<<<<'` parsers and is shaped for low-token output.\n\n```bash\npython3 skills/melt/scripts/conflict-summary.py\n```\n\nDefault output is terse: one metadata line per file plus minimally framed hunks. Flags:\n\n- `--json` — structured output for scripting.\n- `--verbose` — markdown view for humans.\n- `--context N` — context lines around each hunk (default 3).\n\nFor raw git context:\n\n```bash\ngit log --merge --oneline    # commits involved in the merge\ngit status                    # conflict / staging state\n```\n\n### 2. Structural resolution\n\nFor every file mergiraf supports, attempt structural merge:\n\n```bash\n# Preview (dry-run is the default)\npython3 skills/melt/scripts/batch-resolve.py\n\n# Apply clean resolutions and stage them\npython3 skills/melt/scripts/batch-resolve.py --apply\n\n# Markdown output and mergiraf debug logs\npython3 skills/melt/scripts/batch-resolve.py --verbose\n```\n\nTo inspect what mergiraf would produce for a single file without touching the working copy, use `--debug`:\n\n```bash\npython3 skills/melt/scripts/batch-resolve.py --debug <path>\n```\n\nThe script extracts the three stages, runs mergiraf with `RUST_LOG=mergiraf=debug`, keeps the tempdir, and prints paths to the merged output, the log, and the conflict-marker count. Inspect with `cat`/`diff` against the printed paths. If the merged output is clean, apply it:\n\n```bash\ncp <merged_path> <path>\ngit add <path>\n```\n\n### 3. Remaining conflicts\n\nAfter the structural pass, check rerere first:\n\n```bash\ngit rerere status      # files with recorded resolutions\ngit rerere diff        # show what rerere would apply\n```\n\nIf rerere already applied, the conflict is resolved. Otherwise drop into the manual tool:\n\n```bash\ngit mergetool          # opens kdiff3 for each conflicted file\ngit mergetool <path>   # or just one file\n```\n\nAfter manual resolution, finish the interrupted operation:\n\n```bash\ngit add <resolved-files>\ngit merge --continue        # or\ngit rebase --continue       # or\ngit cherry-pick --continue\n```\n\n### 4. Pick ours / theirs (mergiraf-unsupported files)\n\nFor shell, SQL, YAML, JSON, and other formats mergiraf does not parse, use `conflict-pick.py`:\n\n```bash\n# Take ours for every hunk\npython3 skills/melt/scripts/conflict-pick.py hooks/session-start.sh --ours\n\n# Take theirs for every hunk\npython3 skills/melt/scripts/conflict-pick.py .gitignore --theirs\n\n# Match by regex; matched hunks resolve, others remain\npython3 skills/melt/scripts/conflict-pick.py config.yaml --grep \"timeout\" --ours\n```\n\n### 5. Lockfiles\n\nLockfile content has structure that text or AST merge cannot validate. Take one side and regenerate from the manifest:\n\n```bash\n# Auto-detect conflicted lockfiles, take theirs, regenerate, stage\npython3 skills/melt/scripts/lockfile-resolve.py\n\n# Preview\npython3 skills/melt/scripts/lockfile-resolve.py --dry-run\n\n# Take ours instead\npython3 skills/melt/scripts/lockfile-resolve.py --strategy ours\n```\n\nSupports `Cargo.lock`, `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `poetry.lock`, `Pipfile.lock`, `uv.lock`, `Gemfile.lock`, and `go.sum`.\n\n### 6. Debug mergiraf\n\nWhen mergiraf is not resolving something it should, use `--debug` for a single-file inspection (keeps the tempdir, captures `RUST_LOG=mergiraf=debug`):\n\n```bash\npython3 skills/melt/scripts/batch-resolve.py --debug <path>\n\nmergiraf languages | grep <extension>   # is the type registered?\ngit check-attr merge -- <path>          # should show: merge: mergiraf\n```\n\nCommon causes:\n\n- Extension missing from `~/.gitattributes` — regenerate after upgrade.\n- Parse failure on one of the three versions — mergiraf falls back silently.\n- Very large files (>1MB) skip structural merge.\n\n### 7. Maintenance\n\n```bash\nmergiraf languages --gitattributes > ~/.gitattributes   # after upgrade\n\ngit rerere status              # what is currently tracked\ngit rerere diff                # pending resolution diffs\ngit rerere forget <path>       # forget a bad resolution\ngit rerere gc                  # clean old entries\nls .git/rr-cache/              # browse the resolution database\n```\n\n## Scripts\n\n| Script | Purpose | When |\n| --- | --- | --- |\n| `detect-squash-residue.py` | Detect that the branch was squash-merged and emit the abort+cherry-pick remedy | **Run first** — short-circuits the cascade |\n| `conflict-summary.py` | Structured summary with line numbers and context | After residue check |\n| `batch-resolve.py` | Run `mergiraf merge` over every conflicted file | Supported languages |\n| `conflict-pick.py` | Choose ours / theirs per hunk | Shell, SQL, formats mergiraf does not parse |\n| `lockfile-resolve.py` | Take one side and regenerate the lockfile | `Cargo.lock`, `package-lock.json`, etc. |\n\n## Special cases\n\n### Whitespace-only formatting changes\n\nIf one branch ran a formatter while the other modified content, mergiraf can produce more conflicts because AST positions shifted. Resolution: run the formatter on the merged result after resolving conflicts.\n\n### Unrecoverable state\n\nIf conflict state is unrecoverable, abort and start over:\n\n```bash\ngit merge --abort        # or\ngit rebase --abort       # or\ngit cherry-pick --abort\n```\n\n`/melt` surfaces abort as an option; the user decides.\n\n## What this skill does NOT do\n\n- Push or open PRs — hand off to a `gh` skill.\n- Run builds or tests — re-enter `/cook` or run project gates.\n- Commit resolved files outside `git add` staging — use a `commit` skill.\n- Architectural review of merge results — use `/age`.\n- Read, edit, or search files directly — delegate to `/cheez-read`, `/cheez-write`, `/cheez-search`.\n\n## Gotchas\n\n- `mergiraf solve` flag confusion: use `--stdout` / `-p` for preview, NOT `--output`.\n- Markdown is supported by mergiraf but may need `.gitattributes` registration.\n- Lockfile structural merge is not the same as a valid lockfile — always regenerate after taking a side.\n- zdiff3 base markers (`|||||||`) are handled by every script in this skill.\n- If you see conflicts in a supported file type, mergiraf-as-driver already ran — you are looking at the residue.\n\n## Handoff\n\nAfter resolution finishes, prompt the next step via the shared handoff gate in [`../../shared/handoff-gate.md`](../../shared/handoff-gate.md). Include the detected interrupted operation and upstream invocation in the context packet before asking. Default options:\n\n- **Resume** — dispatch the exact continuation command for the current operation (`git merge --continue`, `git rebase --continue`, or `git cherry-pick --continue`). If the triggering skill invocation is known, return to that skill with the original context after the git operation succeeds; otherwise stop with the resumed git status.\n- **Re-run gates** — dispatch the upstream skill invocation that originally surfaced the conflict so its quality gates run on the merged state.\n- **Stop** — dispatch none; leave the working tree staged for the user to inspect.\n\n`/melt` never resumes before the user selects. After a non-stop selection, run the selected continuation immediately.\n\n## Rules\n\n- Always run `detect-squash-residue.py` first; if positive, surface the remedy and stop the cascade.\n- Always run `conflict-summary.py` before deciding the cascade order.\n- Prefer structural resolution over manual edits when mergiraf supports the file type.\n- Never weaken or hand-edit a lockfile in place — regenerate from the manifest.\n- Surface unresolved files explicitly; do not claim a clean tree until `git status` agrees.\n- Never auto-apply the squash-residue remedy — it is destructive (`git reset --hard`); the user copy-pastes it.","tags":["melt","easy","cheese","paulnsorensen","agent-skills","ai-coding","claude-code","code-review","developer-tools"],"capabilities":["skill","source-paulnsorensen","skill-melt","topic-agent-skills","topic-ai-coding","topic-claude-code","topic-code-review","topic-developer-tools"],"categories":["easy-cheese"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/paulnsorensen/easy-cheese/melt","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add paulnsorensen/easy-cheese","source_repo":"https://github.com/paulnsorensen/easy-cheese","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (10,216 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:41.181Z","embedding":null,"createdAt":"2026-05-18T13:21:09.103Z","updatedAt":"2026-05-18T19:13:41.181Z","lastSeenAt":"2026-05-18T19:13:41.181Z","tsv":"'/../shared/handoff-gate.md':1227,1228 '/.gitattributes':876,905 '/age':1130 '/cheez-read':139,1139 '/cheez-search':129,1141 '/cheez-write':149,1140 '/cook':1108 '/melt':44,48,1076,1330 '0':280 '1':200,445 '1mb':895 '2':238,523 '3':261,264,503,634 '4':712 '5':767 '6':824 '7':899 'abort':308,956,1058,1065,1069,1075,1078 'across':136 'ad':455 'ad-hoc':454 'add':633,698,1118 'addit':212 'agre':1409 'alreadi':662,1205 'alway':1175,1349,1362 'anchor':153 'answer':305 'api':387 'appli':150,358,544,552,628,659,663,1413 'applic':440 'architectur':1124 'around':499 'ask':1242 'ast':776,1037 'attempt':531 'attr':865 'auto':357,790,1412 'auto-appli':356,1411 'auto-detect':789 'automat':229 'back':222,890 'bad':926 'base':208,299,360,361,443,1182 'bash':111,156,163,317,468,508,534,579,630,644,674,696,734,788,851,901,1062 'bash-driven':162 'batch-resolve.py':237,979 'branch':293,368,369,444,948,1022 'brows':936 'build':1102 'bulk':169 'cannot':301,778 'captur':846 'cargo.lock':814,1010 'cascad':65,338,437,967,1361,1368 'case':1014 'cat':616 'caus':872 'chain':109,191 'chang':1019 'check':284,371,641,864,978 'check-attr':863 'cheez':127,175 'cherr':47 'cherri':14,59,312,402,423,709,958,1073,1264 'cherry-pick':13,58,401,422,708,957,1072,1263 'choos':990 'circuit':965 'claim':1402 'clean':214,545,627,931,1404 'command':1250 'commit':91,316,395,412,513,1113,1122 'common':871 'compar':364 'config.yaml':763 'conflict':18,29,33,37,40,61,86,98,131,141,144,220,250,259,289,520,611,636,665,681,792,985,1035,1050,1054,1195,1307 'conflict-mark':610 'conflict-pick.py':733,989 'conflict-summary.py':968,1364 'confus':1146 'content':148,770,1030 'context':495,497,507,975,1239,1281 'continu':701,705,711,1249,1257,1260,1266,1346 'copi':350,576,1428 'copy-past':349,1427 'could':75,272 'count':613 'cover':167 'cp':631 'current':373,913,1253 'databas':939 'debug':557,578,582,595,825,836,850,854 'decid':1084,1366 'default':366,372,471,502,541,1243 'deleg':104,124,1137 'deriv':405 'destruct':342,1421 'detect':420,433,791,945,1231 'detect-squash-residue.py':944,1351 'diagnos':446 'diff':266,617,654,917,920 'direct':1136 'directori':147 'dispatch':1246,1298,1318 'dri':537,804 'driven':164 'driver':234,1204 'drop':172,669 'dry-run':536,803 'edit':123,1132,1375,1387 'emit':954 'enough':160 'enter':1107 'entri':933 'especi':254 'etc':1012 'even':215 'everi':527,738,747,984,1187 'exact':1248 'explicit':1399 'extens':873 'extract':585 'failur':228,881 'fall':221,889 'file':102,119,142,187,479,528,571,648,682,688,719,841,894,986,1115,1135,1199,1380,1398 'finish':692,1216 'first':643,962,1352 'fix':30,45 'flag':359,484,1145 'flow':157,165 'forget':923,924 'format':727,997,1018 'formatt':1025,1043 'found':389 'frame':482 'gate':1112,1225,1297,1311 'gc':930 'gemfile.lock':821 'general':82 'gh':93,386,1099 'gh-api':385 'git':9,54,83,232,239,277,343,506,509,518,632,645,652,675,683,697,699,703,707,862,908,915,921,928,1063,1067,1071,1117,1255,1258,1262,1284,1292,1407,1422 'git/rr-cache':935 'gitattribut':904,1162 'gitignor':751 'go':88 'go.sum':823 'gotcha':1142 'grep':457,764,857 'hand':189,430,1095,1386 'hand-edit':1385 'handl':71,1185 'handoff':1213,1224 'hard':345,1424 'hash':152 'hash-anchor':151 'help':302 'helper':114 'hoc':456 'hooks/session-start.sh':742 'human':245,494 'hunk':145,483,501,739,748,757,994 'immedi':1347 'includ':1229 'independ':211 'inspect':120,140,182,563,614,842,1329 'instead':808 'interrupt':694,1232 'invoc':1236,1271,1302 'involv':514 'io':103 'json':374,485,724 'kdiff3':68,262,678 'keep':596,843 'known':1273 'languag':856,903,988 'larg':893 'launch':275 'least':392 'leav':1320 'like':26 'line':477,498,972 'list':146,404,425 'local':394,418 'local-synth':417 'locat':130 'lockfil':768,769,793,1009,1164,1174,1389 'lockfile-resolve.py':1002 'log':510,558,593,607,848 'long':256 'look':1209 'low':465 'low-token':464 'ls':934 'mainten':900 'manifest':787,1395 'manual':122,263,672,690,1374 'markdown':491,553,1154 'marker':99,132,612,1183 'match':398,753,756 'may':1160 'melt':1,27,105 'merg':10,32,43,55,206,213,218,225,233,297,326,383,415,511,517,533,604,624,700,777,866,869,898,952,982,1046,1064,1127,1166,1256,1315 'mergetool':278,676,684 'mergiraf':66,201,253,269,300,529,556,565,590,594,717,728,826,828,849,855,870,888,902,981,998,1031,1143,1158,1202,1377 'mergiraf-as-driv':1201 'mergiraf-unsupport':716 'metadata':476 'minim':481 'miss':874 'modifi':1029 'must':347,426 'n':458,496 'need':180,1161 'never':1331,1382,1410 'next':451,1219 'non':1340 'non-stop':1339 'none':1319 'not-applic':438 'not-detect':431 'number':973 'offlin':421 'old':932 'one':393,475,687,781,883,1004,1021 'onelin':512 'open':677,1093 'oper':84,695,1233,1254,1285 'option':1081,1244 'orchestr':106 'order':1369 'origin':1280,1304 'origin/main':367 'other':759 'otherwis':668,1287 'output':376,467,472,487,554,605,625,1153 'outsid':1116 'p':1149 'package-lock.json':815,1011 'packet':1240 'pars':227,731,880,1001 'parser':459 'pass':640 'past':351,1429 'path':601,621 'pend':918 'per':118,478,993 'per-fil':117 'phrase':25 'pick':15,60,313,403,424,710,713,959,1074,1265 'pipfile.lock':819 'place':1391 'plus':480 'pnpm-lock.yaml':817 'poetry.lock':818 'posit':1038,1354 'post':410 'post-squash':409 'pr':388,400 'prefer':1370 'present':101 'preview':535,800,1151 'previous':74,243 'print':329,600,620 'proceed':434 'produc':17,567,1033 'project':1111 'prompt':1217 'protocol':279 'prs':1094 'purpos':942 'push':1091 'python3':318,469,542,550,559,580,740,749,761,798,801,809,852 'qualiti':1310 'ran':1023,1206 'raw':505 're':311,1106,1295 're-cherry-pick':310 're-ent':1105 're-run':1294 'read':1131 'rebas':11,36,56,257,704,1068,1259 'record':244,650 'recur':260 'ref':362 'regener':784,796,877,1007,1176,1392 'regex':755 'regist':861 'registr':1163 'relat':134 'remain':635,760 'remedi':330,340,960,1357,1418 'replac':453 'replay':241 'rerer':67,240,271,642,646,653,657,661,909,916,922,929 'reset':344,1423 'residu':283,977,1212,1417 'resolut':108,154,171,190,246,525,546,651,691,919,927,938,1040,1215,1372 'resolv':24,34,53,274,667,758,831,1049,1114 'result':1047,1128 'resum':1245,1291,1332 'return':1274 'review':428,1125 'rewrit':184 'right':304 'rule':1348 'run':199,285,447,538,589,805,961,980,1041,1101,1110,1296,1312,1343,1350,1363 'rust':592,847 'script':115,378,450,489,584,940,941,1188 'search':1134 'see':1194 'select':1336,1342,1345 'semant':380 'sha':397 'shape':462 'share':1223 'shell':721,995 'shift':1039 'short':964 'short-circuit':963 'show':655,868 'side':782,1005,1180 'signatur':251 'silent':891 'singl':570,840 'single-fil':839 'sitter':204 'skill':3,51,94,128,176,1087,1100,1123,1191,1270,1277,1301 'skill-melt' 'skills/melt/scripts/batch-resolve.py':543,551,560,581,853 'skills/melt/scripts/conflict-pick.py':741,750,762 'skills/melt/scripts/conflict-summary.py':470 'skills/melt/scripts/detect-squash-residue.py':319 'skills/melt/scripts/lockfile-resolve.py':799,802,810 'skip':896 'solv':1144 'someth':832 'source-paulnsorensen' 'special':1013 'specif':186 'sql':722,996 'squash':282,296,325,382,411,414,951,1416 'squash-merg':295,324,381,413,950 'squash-residu':281,1415 'stage':192,521,548,588,797,1119,1324 'start':1060 'state':522,1052,1055,1316 'status':519,647,910,1293,1408 'stdout':1148 'step':1220 'stop':336,1288,1317,1341,1359 'strategi':811 'structur':64,205,375,486,524,532,639,772,897,969,1165,1371 'succeed':1286 'summari':290,449,970 'support':530,813,987,1156,1198,1378 'surfac':327,1077,1305,1355,1396 'symbol':135 'synth':419 'take':735,744,780,794,806,1003,1178 'tempdir':598,845 'ters':474 'test':1104 'text':217,224,774 'three':587,886 'timeout':765 'token':466 'tool':70,193,673 'topic-agent-skills' 'topic-ai-coding' 'topic-claude-code' 'topic-code-review' 'topic-developer-tools' 'touch':573 'track':914 'tree':138,203,1323,1405 'tree-sitt':202 'trigger':1269 'type':860,1200,1381 'uniqu':315 'unmatch':408 'unrecover':1051,1057 'unresolv':1397 'unsupport':718 'upgrad':879,907 'upstream':1235,1300 'use':6,49,62,79,577,732,835,1120,1129,1147 'user':21,333,354,1083,1327,1335,1426 'uv.lock':820 'valid':779,1173 'verbatim':334 'verbos':490,561 'verdict':322,379 'version':887 'via':110,236,276,384,416,1221 'view':143,492 'want':22 'way':265 'weaken':1383 'whitespac':1016 'whitespace-on':1015 'without':85,572 'work':575,1322 'would':219,566,658 'yaml':723 'yarn.lock':816 'zdiff3':1181","prices":[{"id":"09d22578-d7fe-47ae-a6dc-079e3a5dc2ee","listingId":"cc43fdca-9c56-4f8b-b584-d2f0ffc2ce47","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"paulnsorensen","category":"easy-cheese","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:09.103Z"}],"sources":[{"listingId":"cc43fdca-9c56-4f8b-b584-d2f0ffc2ce47","source":"github","sourceId":"paulnsorensen/easy-cheese/melt","sourceUrl":"https://github.com/paulnsorensen/easy-cheese/tree/main/skills/melt","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:09.103Z","lastSeenAt":"2026-05-18T19:13:41.181Z"}],"details":{"listingId":"cc43fdca-9c56-4f8b-b584-d2f0ffc2ce47","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"paulnsorensen","slug":"melt","github":{"repo":"paulnsorensen/easy-cheese","stars":7,"topics":["agent-skills","ai-coding","claude-code","code-review","developer-tools"],"license":"mit","html_url":"https://github.com/paulnsorensen/easy-cheese","pushed_at":"2026-05-18T06:33:38Z","description":"Cheese your code 🧀 — high-quality results as easy as cheese. A portable, harness-agnostic Agent Skills toolkit.","skill_md_sha":"f17bc7b71146d87e972f4563c45d648e470fff86","skill_md_path":"skills/melt/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/paulnsorensen/easy-cheese/tree/main/skills/melt"},"layout":"multi","source":"github","category":"easy-cheese","frontmatter":{"name":"melt","license":"MIT","description":"This skill should be used when a git merge, rebase, or cherry-pick has produced conflicts and the user wants them resolved — phrases like \"melt the conflicts\", \"fix the merge conflicts\", \"resolve the rebase conflicts\", \"what's conflicting after the merge\", \"/melt\", \"fix the cherry-pick\", or any prompt that surfaces `<<<<<<<` markers, `CONFLICT (...)` git output, or a half-finished merge state. First checks for squash-merge residue (rebase doomed by a squash-merged PR — abort and re-cherry-pick), then runs the structural-merge cascade — mergiraf (AST-aware auto-resolve) → git rerere (replay remembered fixes) → kdiff3 (manual fallback) — with helper scripts for batch resolution, ours/theirs picks, and lockfile regeneration. Use even when only one file is conflicting if the user wants the structural pass attempted before manual editing. Do NOT use for general git operations without conflicts. After `/cook` or `/cure` if a merge step blocked them; before retrying the gate that surfaced the conflict."},"skills_sh_url":"https://skills.sh/paulnsorensen/easy-cheese/melt"},"updatedAt":"2026-05-18T19:13:41.181Z"}}