Agent Operating Guide
/bridge-conflict-resolve
Analyze a same-field-both-sides sync conflict and propose a resolution, keep Canvas, keep external, merge, or surface to a human, with rationale, read-only.
Triage a conflict where the same field changed on both sides, in Canvas and in the external system, since the last sync. A bi-directional sync calls this skill once per conflict; it weighs the two values and proposes one of four resolutions, keep the Canvas value, keep the external value, merge them, or surface the choice to a person, each with a rationale. It is read-only and never writes to Canvas: the sync that called it applies the resolution through suggest_change, so a human still approves the result.
When to use
Section titled “When to use”You rarely call this directly: the Archer and ServiceNow syncs invoke it automatically when a pull hits a conflicting field. Call it directly to see how a specific conflict would resolve, or to work through conflicts a sync has surfaced.
Inputs
Section titled “Inputs”The calling sync supplies these; you’d only pass them for a manual, one-off triage.
| Flag | Required | Notes |
|---|---|---|
--record-id <id> |
Yes | The Canvas item in conflict. |
--field-name <text> |
Yes | The conflicting field. |
--field-type <type> |
Yes | string, int, enum, array, or timestamp: selects which resolution rule applies. |
--canvas-value <json> |
Yes | Current Canvas value; pair with --canvas-modified-by and --canvas-modified-at for context. |
--external-value <json> |
Yes | Current external value; pair with --external-modified-by and --external-modified-at. |
--external-system <name> |
Yes | archer, snow, auditboard, or workday: sets the source-of-record defaults. |
Example
Section titled “Example”When an Archer pull finds that an issue’s substatus changed in both systems
since the last sync, /bridge-archer-sync invokes this
skill with both values and their edit timestamps. Because Archer is the source
of record for substatus, it proposes keep-external with that rationale, and the
sync stages a suggest_change for you to approve. A diverging severity or
status, or a changed owner or linkage, is always surfaced to a person rather
than auto-resolved.
Good to know
Section titled “Good to know”- Source of record varies by system and field. Archer is typically source for substatus and remediation progress; Canvas is source for issue title, severity, and owner. The defaults assume this.
- Surface-to-user is the safe default but the expensive one: it’s reserved for genuinely ambiguous conflicts, while clear-cut ones (one side null, one side computed from the other) resolve automatically.
- Array fields where both sides only added items merge as a union; if either side removed an item, the conflict is surfaced instead of clobbering that removal.
- You can pin per-field resolutions in a customer policy that overrides these defaults.
Related
Section titled “Related”- /bridge-archer-sync: a caller; detects the conflict during a pull.
- /bridge-snow-sync: the other caller.
- /bridge-sync-status: where open conflicts are counted per bridge.
- Builds on suggest_change: how the calling sync applies the resolution.