User guide / Git

Background operation and failures

Development reference · View source

Git discovery, reads, mutations, hooks, fetch, pull, and push run on a bounded background service, so editing and rendering continue while they queue or run.

Progress. A long mutation temporarily replaces the status row with the action, its target, elapsed time, a cancellation hint, and a rotating - \ | / bar at the right. Every background service using this surface gets the same spinner.

Cancelling. :git-cancel stops the current operation. A cancelled mutation is reported as uncertain and reconciled at once, because cancelling is not rollback.

Network safety.

  • Network operations have a two-minute deadline.
  • Nothing can prompt: Git’s prompts are off, ssh runs in batch mode unless you set GIT_SSH_COMMAND, and no askpass helper falls back to the terminal. An authentication needing a password fails with a message instead of hanging behind an invisible prompt.

Environment safety.

  • Repository- and object-selection variables such as GIT_DIR and GIT_INDEX_FILE, and inherited one-shot Git configuration, are removed from every child. Starting Runyte from another Git command cannot retarget it.
  • File arguments are always literal: a name resembling Git pathspec syntax still names only that file.

Discovery failures.

  • The status line shows the failure with a :git-refresh hint, and retrying discovery while a retry runs.
  • :git-refresh makes one new discovery attempt in the background. Further invocations are unavailable, with a reason, until it finishes. Nothing retries automatically: launch failures, signal exits, permissions, and configuration errors all wait for you.
  • Each of discovery’s three local Git reads has a 30-second deadline and bounded output. A signal exit does not tell whether the child reached Git.
  • Other Git commands stay unavailable. Their palette reasons and the git row in :service-health keep the last diagnostic during a retry.
  • A new failure replaces the diagnostic. Success clears it and either refreshes the repository or reports that the project is not in a Git repository, which offers no retry.
  • Failure notifications stay in the notification history.
  • Persistent sessions keep the discovery state and notifications across detach and reattach; reattaching does not start another attempt.