Common Git Conflicts in Prompt and Config Files
Conflict markers inside a system prompt or tool schema are not a cosmetic git problem.
Search across all documentation pages
Conflict markers inside a system prompt or tool schema are not a cosmetic git problem.
They are corrupted control flow: models will treat <<<<<<< as text, JSON parsers will throw, and production can ship nonsense if CI does not catch it.
git commit.system_v4.txt instead of three people rewriting system.txt.git status - know which files are unmerged.rg -n '^(<<<<<<<|=======|>>>>>>>)' agent_pack deploy (or whole repo).rg -n '^(<<<<<<<|=======|>>>>>>>)' agent_pack deploy || echo "no markers"=======.<<<<<<< HEAD
Refuse to discuss refunds over $50 without approval.
=======
Refuse to discuss refunds over $100 without approval.
>>>>>>> prompt/raise-limitResolution is a product decision, not a text-diff aesthetic. Document the chosen limit in the PR.
python -m json.tool file.json or schema validator.name entries.python -m json.tool agent_pack/tools/tools_v2.json > /dev/nullTaking required from side A and property names from side B without host dual-read support. That creates guaranteed tool-call failures.
active.json usually means "who promotes what," not a text merge.v2 vs v3 is not v2.5.git add resolved paths - then git status clean of unmerged paths.rg check again.git merge --continue / git rebase --continue as appropriate."""Fail CI if conflict markers appear under agent packs."""
from pathlib import Path
import sys
ROOTS = [Path("agent_pack"), Path("deploy")]
MARKERS = ("<<<<<<<", ">>>>>>>", "=======")
def main() -> int:
bad: list[str] = []
for root in ROOTS:
if not root.exists():
continue
for path in root.rglob("*"):
if not path.is_file():
continue
try:
text = path.read_text(encoding="utf-8")
except UnicodeDecodeError:
continue
for i, line in enumerate(text.splitlines(), 1):
if line.startswith(MARKERS):
bad.append(f"{path}:{i}:{line[:20]}")
if bad:
print("conflict markers found:")
print("\n".join(bad))
return 1
print("ok")
return 0
if __name__ == "__main__":
raise SystemExit(main())Also fail CI on invalid tool JSON and on missing pin fields required by the loader.
| Situation | Prefer |
|---|---|
| Tiny wording clash on same policy | Hand-merge prose |
| Two large rewrites of one file | New version file + product pick |
| Schema add vs schema add (compatible) | Merge keys + validate |
| Schema rename vs behavior change | Sequence PRs; dual-support |
| Pin file both changed | Rewrite pin after deciding versions |
| Generated file both changed | Regenerate from source of truth |
Code conflicts usually fail the compiler or tests. Prompt conflicts can parse fine as text and still ship wrong policy.
Only when you truly intend to drop the other change. For shared policy, that often deletes someone else's required safety line.
Curate a minimal combined set; large few-shot dumps thrash tokens and hide intent. Redact and eval.
Yes. Enforce format on save/CI so diffs are semantic. Reformat both sides to the same style before merging content.
They rewrite whole files more often, increasing collide surface. Prefer smaller edits and immutable versions; always re-scan for markers.
For safety-critical prompts and tool schemas, yes. Treat the resolution PR as a behavior change.
Keep agent packs as text. Do not store canonical prompts in opaque binaries.
Custom merge drivers are rare and fragile for prose. Process and versioning beat clever drivers for most teams.
Yes if multiple editors can change the same revision or if you mirror hub content into git. Conflict and overwrite risk remains.
Roll production pin to last known good. Resolve the merge calmly on a branch; do not hot-merge into the live pin mid-incident.
Run a synthetic conflict drill in onboarding with a deliberate marker file and a required validation script.
At line start during a merge, treat it as a marker. Also search for the angle-bracket forms which are unambiguous.
Stack versions: Pins from the category manifest (verify at build): OpenRouter (~315+ models, July 2026 pricing/fees); LangGraph 1.0+; CrewAI 1.14+; Microsoft Agent Framework 1.0; Vercel AI SDK 6; Pydantic AI (latest); LlamaIndex (latest); OpenAI Agents SDK (latest + MCP); MCP (Linux Foundation governance); A2A (HTTP+SSE+JSON-RPC 2.0); Solana
@solana/web3.js+@solana/spl-token.
Reviewed by Chris St. John·Last updated Jul 16, 2026