ticket-sync
Two-way sync between ADLC tickets and an external tracker (GitHub Issues), dry-run by default and failing closed on conflict.
ticket-sync
ADLC phase: P0 Triage (external integration) · Gate: a non-clean pull fails closed (exit 2) rather than overwriting the local ticket store.
What it defends against
The ticket backlog and its external tracker drift apart the moment either is edited alone. ticket-sync reconciles both directions through the gh CLI against either the canonical sharded store or the legacy bridge. It is dry-run by default, and a pull that hits an unresolvable conflict aborts before any write (and before any push), so an unreconciled sync can never clobber the rails trust root. Sync bookkeeping lives in a gitignored, rebuildable sidecar; a stable sentinel key plus a pre-create adoption scan make create idempotent, so a re-run never duplicates an issue.
Usage
adlc ticket <pull|push|sync|doctor> [--write] [--force] [--allow-rail-narrowing] [--json]The standalone binary is adlc-ticket-sync; the same command dispatches through the umbrella as adlc ticket.
| Command / Flag | Description |
|---|---|
pull | Import issues into the active ticket store (3-way reconcile; unions; fails closed on conflict). |
push | Write tickets back: update synced issues, idempotent create for local-only tickets, display-only status. |
sync | pull then push; a non-clean pull aborts before push. |
doctor | Read-only, offline health checks (config / tickets / schema drift / sidecar / stale lock). |
--write | Apply changes (dry-run without it). |
--force | Override a blocked pull. |
--allow-rail-narrowing | Permit a pull that narrows declared rails. |
--json | Machine-readable output on all commands. |
Exit codes
gh failure, unknown flag or subcommand).2: blocked. A conflict the sync refuses to resolve automatically.Example
$ adlc ticket pull
[dry-run] would plan:
import gh:voodootikigod/adlc#39
reconcile T4 (union)
Dry run — re-run with --write to apply.
exit 0