Close one issue. That's all it took.
One click closed an issue on GitHub. That closed the linked task in our app. Closing the task fired our own "task changed" listener, which pushed the change back to GitHub, which closed the issue again, which fired another webhook, which closed the task again. I had built a machine whose entire job was to bury GitHub's API in its own echo.
It ran fine in testing. Of course it did. Loops need a real round trip to form, and my test never went all the way around the circle. The bug was waiting for production like it had manners.
Both directions worked, and that was the bug
When we wired up two-way sync between GitHub issues and sparQ tasks, the happy path was easy. Close an issue on GitHub, we close the task. Close a task in sparQ, we close the issue. Both directions worked the first time I tried them.






