{"version":"2.1.224","anchor":"git-checkout-machinery-for-self-hosted-runners-ships-in-full","canonical_anchor":"git-checkout-machinery-for-self-hosted-runners-ships-in-full","heading":"Git checkout machinery for self-hosted runners ships in full","tier":"soon","area":"Runners","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224\/e\/git-checkout-machinery-for-self-hosted-runners-ships-in-full","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224","markdown":"### Git checkout machinery for self-hosted runners ships in full\n\nFull git checkout machinery for self-hosted runners now ships, but you cannot reach it interactively.\n\n**What**\n\nThe code that prepares a git working copy for runner and bring-your-own-compute sessions is now in the bundle; the previous release only declared its environment variable. It is not reachable from an interactive session. `CLAUDE_RUNNER_FETCH_DEPTH` tunes clone depth and accepts `full`, `0`, or a positive integer, with an unparseable value logged and ignored in favour of the default.\n\n**Details**\n\n- Access is validated with exponential backoff, and fetches retry under a cumulative wall-clock cap, degrading to HTTP\/1.1 and low-speed timeouts on later attempts.\n- Git's progress output feeds a stall watchdog that sends SIGTERM then SIGKILL to a hung fetch.\n- Detects empty remotes and refs that have permanently failed, prefers a delta `read-tree` reset over `reset --hard`, and manages detached per-session worktrees.\n- Command lines, stderr and telemetry are redacted for URLs and credentials: Anthropic keys, GitHub\/GitLab\/Slack\/Square tokens, JWTs, and Bearer and Basic auth headers.\n\n**Evidence**\n\n`[byoc:git] Repository is empty, skipping checkout`\n\n- Area: Runners\n- Names: `CLAUDE_RUNNER_FETCH_DEPTH`\n- Tier: Nothing to try yet\n- Useful: 2\/5\n- Signal: 5\/5\n- Present in the build but not switched on"}