Skip to content

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.

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.

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.

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.

  • 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.