Skip to content

docs: update runner doctor — A13 fixed in v0.27.15, B7 rootless repair incomplete#5762

Merged
lpcox merged 3 commits into
mainfrom
copilot/update-a13-fix-and-b7-repair
Jul 1, 2026
Merged

docs: update runner doctor — A13 fixed in v0.27.15, B7 rootless repair incomplete#5762
lpcox merged 3 commits into
mainfrom
copilot/update-a13-fix-and-b7-repair

Conversation

Copilot AI commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Knowledge-base sync for scan window 2026-06-29→30: two lessons from #5693/#5696 (A13 shipped) and #5708/#5717 (B7 rootless edge case).

A13 — Fixed in v0.27.15 (arc-dind topology)

runner.topology: "arc-dind" now triggers a sysroot-stage init container that copies the signed build-tools image filesystem into a sysroot volume at /host:ro before the agent starts. The old "Unresolved / bake binaries into daemon image" workaround is gone.

  • Fix/flag cell: "Unresolved" → "Fixed in AWF v0.27.15"
  • Probe updated to check awf --version ≥ v0.27.15 and sysroot-stage in compose output
  • Citations: add #5693, #5696
  • Root cause: removed stale stageBaseSystem()/dind.preStageDirs framing
  • Known unresolved items list: A13 entry removed
  • §4 open-gaps prose: "ARC/DinD base-userland staging" removed

B7 — Partially fixed; rootless chown insufficient

In rootless Docker the repair container's chown runs inside the user namespace and may not affect host-level ownership, leaving an orphan /tmp/awf-*-chroot-home dir. Post-v0.27.15 (#5717) adds chmod -R a+rwX as a fallback.

  • Signal: appended [WARN] Failed to remove chroot home directory after permission repair trigger
  • Fix/flag: "Fixed" → "Partially fixed in v0.27.13"; documents the pending chmod fix
  • Probe: added log-warn check
  • Citations: add #5708, #5717

Files changed

All three mirrored files updated identically per the updater workflow's sync contract:

  • .github/workflows/shared/self-hosted-failure-modes.md
  • .github/workflows/self-hosted-runner-doctor.md
  • .github/agents/self-hosted-runner-doctor.md

Copilot AI changed the title [WIP] Update runner doctor knowledge base for A13 and B7 issues docs: update runner doctor — A13 fixed in v0.27.15, B7 rootless repair incomplete Jul 1, 2026
Copilot AI requested a review from lpcox July 1, 2026 18:42
Copilot finished work on behalf of lpcox July 1, 2026 18:42
@lpcox lpcox requested a review from Copilot July 1, 2026 18:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR syncs the self-hosted runner “runner doctor” knowledge base across its three mirrored copies, incorporating the latest scan window learnings for ARC/DinD (A13) and rootless cleanup (B7) so triage guidance matches current AWF behavior.

Changes:

  • Updates failure mode A13 to “Fixed in AWF v0.27.15” via runner.topology: "arc-dind" and the sysroot-stage init container approach.
  • Updates failure mode B7 to reflect the remaining rootless Docker edge case and the post-v0.27.15 chmod -R a+rwX mitigation.
  • Removes A13 from the “known unresolved items / open gaps” lists and updates the corresponding prose.
Show a summary per file
File Description
.github/workflows/shared/self-hosted-failure-modes.md Updates A13/B7 table rows and removes A13 from known-unresolved list.
.github/workflows/self-hosted-runner-doctor.md Updates the “open gaps” guidance to reflect A13 being fixed in v0.27.15.
.github/agents/self-hosted-runner-doctor.md Mirrors the same runner-doctor guidance and A13/B7 updates.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 3/3 changed files
  • Comments generated: 4
  • Review effort level: Low

| B5 | `getaddrinfo EAI_AGAIN <awmg-cli-proxy>` → `awf-cli-proxy could not connect to the external DIFC proxy` → `The agent was never invoked` in `--network-isolation` + `--topology-attach` runs | Startup ordering deadlock: `connectTopologyContainers()` runs only after `startContainers()` succeeds, but `startContainers()` blocks on the cli-proxy health gate that requires the topology peer to be reachable on `awf-net` (which `internal: true`). The peer is never attached → EAI_AGAIN → fail-fast → deadlock. Deterministic, not flaky. | Resolved in AWF: attach topology peers to `awf-net` before the health-gated bring-up (Fix A: split `up -d`, network first → attach → remaining); also harden cli-proxy to treat `EAI_AGAIN`/`ENOTFOUND` as not-yet-ready (Fix B) | Confirm `topologyAttach` is non-empty; check the cli-proxy logs for `EAI_AGAIN`; verify AWF version includes the ordering fix | #5543, #5542 |
| B6 | `EACCES` in `upload-artifact` step after a `sudo: false` (`--network-isolation`) AWF run; firewall log/audit dirs present but unreadable | Sidecars write files as non-runner UIDs (squid → uid 13, cli-proxy → `cliproxy`, agent/iptables-init → root). AWF's `chmod -R a+rX` repair runs as the unprivileged runner and silently fails at `debug` level on files it doesn't own | Resolved in AWF: (a) run Node sidecars as runner UID via compose `user:`; (b) root perm-fixer container at cleanup (daemon-run, mounts log dir, chowns to runner UID, skipped when `--keep-containers`); (c) promote swallowed-`chmod` failure from `debug` to `warn` | `ls -la <firewall-logs-dir>` after run — look for root or uid-13 owned files; check AWF logs for the swallowed `chmod` warning | #5545, #5542 |
| B7 | AWF exits with unhandled `EACCES` error during cleanup; stack trace shows `unlink ... /tmp/awf-<ts>-chroot-home/<path>` (e.g. `.aws/config`, cloud credentials) | In rootless Docker mode the agent container runs with UID namespace remapping. Files created by the agent inside the `chroot-home` temp directory are owned by remapped UIDs. AWF's `removeWorkDirectories()` runs as the unprivileged host runner and `fs.rmSync` fails on these files. | **Fixed in AWF v0.27.13**: upgrade AWF; `removeWorkDirectories` now catches `EACCES` and retries after spinning up a short-lived repair container (`CHOWN`/`DAC_OVERRIDE`/`FOWNER` capabilities) that chowns the files back to the host user | `ls -la /tmp/awf-*-chroot-home/` after a rootless run — files owned by non-runner UIDs confirm the mode; upgrade to AWF ≥ v0.27.13 | #5653 |
| B7 | AWF exits with unhandled `EACCES` error during cleanup; stack trace shows `unlink ... /tmp/awf-<ts>-chroot-home/<path>` (e.g. `.aws/config`, cloud credentials); or `[WARN] Failed to remove chroot home directory after permission repair` after a seemingly successful repair container run | In rootless Docker mode the agent container runs with UID namespace remapping. Files created by the agent inside the `chroot-home` temp directory are owned by remapped UIDs. AWF's `removeWorkDirectories()` runs as the unprivileged host runner and `fs.rmSync` fails on these files. | **Partially fixed in AWF v0.27.13** (repair container with CHOWN/DAC_OVERRIDE/FOWNER capabilities); **further fix merged post-v0.27.15** (#5717): in rootless Docker the repair container's `chown` operates within the user namespace and may not change host-level ownership. The post-v0.27.15 fix adds `chmod -R a+rwX` so the host can delete the directory regardless of ownership. Non-fatal if unfixed — leaves an orphan `/tmp/awf-*-chroot-home` dir. | `ls -la /tmp/awf-*-chroot-home/` after a rootless run — files owned by non-runner UIDs confirm the mode; upgrade to AWF ≥ v0.27.13; check AWF logs for `[WARN] Failed to remove chroot home directory after permission repair` | #5653, github/gh-aw-firewall#5708, github/gh-aw-firewall#5717 |
| B5 | `getaddrinfo EAI_AGAIN <awmg-cli-proxy>` → `awf-cli-proxy could not connect to the external DIFC proxy` → `The agent was never invoked` in `--network-isolation` + `--topology-attach` runs | Startup ordering deadlock: `connectTopologyContainers()` runs only after `startContainers()` succeeds, but `startContainers()` blocks on the cli-proxy health gate that requires the topology peer to be reachable on `awf-net` (which `internal: true`). The peer is never attached → EAI_AGAIN → fail-fast → deadlock. Deterministic, not flaky. | Resolved in AWF: attach topology peers to `awf-net` before the health-gated bring-up (Fix A: split `up -d`, network first → attach → remaining); also harden cli-proxy to treat `EAI_AGAIN`/`ENOTFOUND` as not-yet-ready (Fix B) | Confirm `topologyAttach` is non-empty; check the cli-proxy logs for `EAI_AGAIN`; verify AWF version includes the ordering fix | #5543, #5542 |
| B6 | `EACCES` in `upload-artifact` step after a `sudo: false` (`--network-isolation`) AWF run; firewall log/audit dirs present but unreadable | Sidecars write files as non-runner UIDs (squid → uid 13, cli-proxy → `cliproxy`, agent/iptables-init → root). AWF's `chmod -R a+rX` repair runs as the unprivileged runner and silently fails at `debug` level on files it doesn't own | Resolved in AWF: (a) run Node sidecars as runner UID via compose `user:`; (b) root perm-fixer container at cleanup (daemon-run, mounts log dir, chowns to runner UID, skipped when `--keep-containers`); (c) promote swallowed-`chmod` failure from `debug` to `warn` | `ls -la <firewall-logs-dir>` after run — look for root or uid-13 owned files; check AWF logs for the swallowed `chmod` warning | #5545, #5542 |
| B7 | AWF exits with unhandled `EACCES` error during cleanup; stack trace shows `unlink ... /tmp/awf-<ts>-chroot-home/<path>` (e.g. `.aws/config`, cloud credentials) | In rootless Docker mode the agent container runs with UID namespace remapping. Files created by the agent inside the `chroot-home` temp directory are owned by remapped UIDs. AWF's `removeWorkDirectories()` runs as the unprivileged host runner and `fs.rmSync` fails on these files. | **Fixed in AWF v0.27.13**: upgrade AWF; `removeWorkDirectories` now catches `EACCES` and retries after spinning up a short-lived repair container (`CHOWN`/`DAC_OVERRIDE`/`FOWNER` capabilities) that chowns the files back to the host user | `ls -la /tmp/awf-*-chroot-home/` after a rootless run — files owned by non-runner UIDs confirm the mode; upgrade to AWF ≥ v0.27.13 | #5653 |
| B7 | AWF exits with unhandled `EACCES` error during cleanup; stack trace shows `unlink ... /tmp/awf-<ts>-chroot-home/<path>` (e.g. `.aws/config`, cloud credentials); or `[WARN] Failed to remove chroot home directory after permission repair` after a seemingly successful repair container run | In rootless Docker mode the agent container runs with UID namespace remapping. Files created by the agent inside the `chroot-home` temp directory are owned by remapped UIDs. AWF's `removeWorkDirectories()` runs as the unprivileged host runner and `fs.rmSync` fails on these files. | **Partially fixed in AWF v0.27.13** (repair container with CHOWN/DAC_OVERRIDE/FOWNER capabilities); **further fix merged post-v0.27.15** (#5717): in rootless Docker the repair container's `chown` operates within the user namespace and may not change host-level ownership. The post-v0.27.15 fix adds `chmod -R a+rwX` so the host can delete the directory regardless of ownership. Non-fatal if unfixed — leaves an orphan `/tmp/awf-*-chroot-home` dir. | `ls -la /tmp/awf-*-chroot-home/` after a rootless run — files owned by non-runner UIDs confirm the mode; upgrade to AWF ≥ v0.27.13; check AWF logs for `[WARN] Failed to remove chroot home directory after permission repair` | #5653, github/gh-aw-firewall#5708, github/gh-aw-firewall#5717 |
@@ -109,9 +109,9 @@ Prefer the narrowest match. Examples:

### 4. Check for known unresolved problems
@@ -81,9 +81,9 @@ Prefer the narrowest match. Examples:

### 4. Check for known unresolved problems
@lpcox lpcox marked this pull request as ready for review July 1, 2026 19:21
@lpcox

lpcox commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

@copilot address review feedback

Copilot AI commented Jul 1, 2026

Copy link
Copy Markdown
Contributor Author

@copilot address review feedback

Done in 3707555..latest:

  • B7 Signal (shared/self-hosted-failure-modes.md, agents/self-hosted-runner-doctor.md): Replaced the ambiguous "AWF exits with unhandled EACCES…; or [WARN]…" text with version-scoped descriptions — AWF < v0.27.13 gets the unhandled stack-trace description, AWF ≥ v0.27.13 gets the caught-error / WARN-log description.
  • Section heading (workflows/self-hosted-runner-doctor.md, agents/self-hosted-runner-doctor.md): Renamed "Check for known unresolved problems" → "Check for known gaps and notable fixes" so the heading no longer contradicts the A13 fixed entry.

Copilot finished work on behalf of lpcox July 1, 2026 19:24
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

✅ Copilot review passed with no inline comments.

@copilot Add the ready-for-aw label to this PR to trigger agentic CI smoke tests.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

📡 Smoke OTel Tracing completed. All tracing scenarios validated. ✅

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Gemini completed. All facets verified. 💎

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Build Test Suite completed successfully!

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK AOAI (api-key) completed. Copilot AOAI BYOK (api-key) mode operational. 🔓

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Contribution Check completed successfully!

Contribution guidelines review complete for PR #5762: all applicable CONTRIBUTING.md requirements are satisfied; no comment needed.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK AOAI (Entra) completed. Copilot AOAI BYOK (Entra) mode operational. 🔓

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Claude passed

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🔌 Smoke Services — All services reachable! ✅

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🚀 Security Guard has started processing this pull request

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🔑 Smoke Copilot PAT PAT auth validated. All systems operational. ✅

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🤖 Smoke Test Results — PASS

Test Status
GitHub MCP connectivity
github.com HTTP connectivity ✅ 200
File write/read

PR: docs: update runner doctor — A13 fixed in v0.27.15, B7 rootless repair incomplete
Author: @Copilot · Assignees: @lpcox @Copilot

Overall: ✅ PASS

📰 BREAKING: Report filed by Smoke Copilot
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot PAT Auth — PR #5762 (@Copilot, assignees: @lpcox @Copilot)

Test Result
GitHub MCP connectivity
GitHub.com HTTP ❌ (template vars unresolved — pre-step data unavailable)
File write/read ❌ (template vars unresolved — pre-step data unavailable)

Overall: FAIL — pre-computed step outputs (SMOKE_HTTP_CODE, SMOKE_FILE_PATH, SMOKE_FILE_CONTENT, SMOKE_PR_DATA) were not injected; workflow expression substitution did not occur.

Auth mode: PAT (COPILOT_GITHUB_TOKEN)

🔑 PAT report filed by Smoke Copilot PAT
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Test: Claude Engine Validation

Check Result
API status ✅ PASS
GH check ✅ PASS
File status ✅ PASS

Overall result: PASS

Generated by Smoke Claude for #5762 · 30.2 AIC · ⊞ 3.3K ·
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot BYOK (Direct) Mode ✅

All tests passed.

  • ✅ Test 1: GitHub MCP connectivity (fetched 2 PRs)
  • ✅ Test 2: GitHub.com connectivity (HTTP 200)
  • ✅ Test 3: File write/read test
  • ✅ Test 4: Direct BYOK inference path active (agent → api-proxy → api.githubcopilot.com)

Status: PASS

Running in direct BYOK mode via COPILOT_PROVIDER_API_KEY. Agent credentials are placeholder-only; real key held by api-proxy sidecar.

🔑 BYOK report filed by Smoke Copilot BYOK
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

@lpcox

  • GitHub MCP: ✅
  • GitHub.com connectivity: ✅
  • File write/read: ✅
  • BYOK inference: ✅

Direct BYOK (github-oidc+Azure AD) via api-proxy → Azure OpenAI (Foundry, o4-mini-aw)

Overall: PASS

🪪 BYOK (AOAI Entra) report filed by Smoke Copilot BYOK AOAI (Entra)
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

@lpcox @Copilot

docs: update runner doctor — A13 fixed in v0.27.15, B7 rootless repair incomplete

  • GitHub MCP: ✅
  • GitHub.com: ✅
  • File I/O: ✅
  • Direct BYOK inference: ✅

Running in direct BYOK mode (COPILOT_PROVIDER_API_KEY + COPILOT_PROVIDER_BASE_URL) via api-proxy → Azure OpenAI (Foundry, o4-mini-aw)

Overall: PASS

🔑 BYOK (AOAI api-key) report filed by Smoke Copilot BYOK AOAI (api-key)
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🔭 Smoke Test: API Proxy OpenTelemetry Tracing

Scenario Result Notes
1. Module Loading otel.js initializes on load via _init(); exports startRequestSpan, setTokenAttributes, setBudgetAttributes, endSpan, endSpanError, shutdown, isEnabled
2. Test Suite 60 OTEL test cases found (otel.test.js: 40, otel-fanout.test.js: 20) covering span creation, token attrs, budget attrs, parent context propagation
3. Env Var Forwarding src/services/api-proxy-env-config.ts forwards GH_AW_OTLP_ENDPOINTS, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS, GITHUB_AW_OTEL_TRACE_ID, GITHUB_AW_OTEL_PARENT_SPAN_ID, OTEL_SERVICE_NAME to api-proxy container
4. Token Tracker Integration token-tracker-http.js exposes onUsage callback (line 283); invoked post-normalization (line 324–326) as the OTEL hook point
5. OTEL Diagnostics / Graceful Degradation No OTLP endpoint → file fallback at /var/log/api-proxy/otel.jsonl; OTLP configured → exports through Squid proxy; no errors when unconfigured

All scenarios pass. OTEL tracing integration is correctly implemented.

📡 OTel tracing validated by Smoke OTel Tracing
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

✅ fix: ensure chmod runs even when chown fails in rootless permission repair
✅ Refactor startContainers into focused startup and failure helpers
PASS

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • registry.npmjs.org

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "registry.npmjs.org"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🔍 Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python Python 3.12.13 Python 3.12.3
Node.js v24.17.0 v22.23.0
Go go1.22.12 go1.22.12

Overall: ❌ Not all tests passed — Python and Node.js versions differ between host and chroot.

Tested by Smoke Chroot
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Smoke Test: GitHub Actions Services Connectivity

Check Result
Redis PING ❌ timeout (port blocked by AWF iptables)
PostgreSQL pg_isready ❌ no response
PostgreSQL SELECT 1 ❌ timeout

Overall: FAIL

host.docker.internal resolves to 172.17.0.1 but both Redis (6379) and PostgreSQL (5432) are unreachable from inside the AWF agent container. The AWF iptables rules block database ports as a security measure, preventing connectivity to the GitHub Actions service containers.

🔌 Service connectivity validated by Smoke Services
Add label ready-for-aw to run again

@github-actions github-actions Bot mentioned this pull request Jul 1, 2026
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Gemini Engine Smoke Test Results

Overall status: FAIL

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • localhost

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "localhost"

See Network Configuration for more information.

💎 Faceted by Smoke Gemini
Add label ready-for-aw to run again

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🏗️ Build Test Suite Results

Ecosystem Project Build/Install Tests Status
Bun elysia 1/1 passed ✅ PASS
Bun hono 1/1 passed ✅ PASS
C++ fmt N/A ✅ PASS
C++ json N/A ✅ PASS
Deno oak N/A 1/1 passed ✅ PASS
Deno std N/A 1/1 passed ✅ PASS
.NET hello-world N/A ✅ PASS
.NET json-parse N/A ✅ PASS
Go color 1/1 passed ✅ PASS
Go env 1/1 passed ✅ PASS
Go uuid 1/1 passed ✅ PASS
Java gson 1/1 passed ✅ PASS
Java caffeine 1/1 passed ✅ PASS
Node.js clsx All passed ✅ PASS
Node.js execa All passed ✅ PASS
Node.js p-limit All passed ✅ PASS
Rust fd 1/1 passed ✅ PASS
Rust zoxide 1/1 passed ✅ PASS

Overall: 8/8 ecosystems passed — ✅ PASS

Generated by Build Test Suite for #5762 · 41.3 AIC · ⊞ 7.8K ·
Add label ready-for-aw to run again

@lpcox lpcox merged commit 59716a4 into main Jul 1, 2026
80 checks passed
@lpcox lpcox deleted the copilot/update-a13-fix-and-b7-repair branch July 1, 2026 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment