@htekdev/actions-debugger 1.0.21 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,133 @@
1
+ id: known-unsolved-020
2
+ title: "Homebrew Transitive Dependency Silently Removed — Only Documented Formulas Are Guaranteed"
3
+ category: known-unsolved
4
+ severity: limitation
5
+ tags:
6
+ - macos
7
+ - homebrew
8
+ - transitive-dependency
9
+ - runner-image
10
+ - brew
11
+ - silent-removal
12
+ - limitation
13
+ patterns:
14
+ - regex: "No such file or directory.*homebrew.*opt.*\\b(libevent|libiconv|libffi|gettext)\\b"
15
+ flags: "i"
16
+ - regex: "Library not loaded.*homebrew.*opt.*\\.dylib.*image not found"
17
+ flags: "i"
18
+ - regex: "brew.*error.*([a-z0-9_-]+): No available formula"
19
+ flags: "i"
20
+ - regex: "dyld.*Library not loaded.*/opt/homebrew/opt/[a-z0-9_-]+/lib"
21
+ flags: "i"
22
+ error_messages:
23
+ - "Error: No such file or directory - /opt/homebrew/opt/libevent/lib/libevent.dylib"
24
+ - "dyld[80]: Library not loaded: /opt/homebrew/opt/libevent/lib/libevent.dylib"
25
+ - "pkg-config: Package 'libevent', required by 'virtual:world', not found"
26
+ - "CMake Error: Could not find a package configuration file provided by 'libevent'"
27
+ root_cause: |
28
+ GitHub-hosted macOS runner images include a curated list of Homebrew formulae that are
29
+ **officially documented and guaranteed** (listed in the image README, e.g.
30
+ `images/macos/macos-15-Readme.md`). Any Homebrew package that is present on the image
31
+ only as a **transitive dependency** of another formula — not explicitly documented — can
32
+ silently disappear between image updates when the parent formula's dependency chain changes.
33
+
34
+ **What happens:**
35
+ When a documented formula is upgraded (e.g., `tmux`, `openssl@3`, `ffmpeg`), its new
36
+ version may no longer depend on the same set of transitive packages as the previous
37
+ version. The transitive dependency is removed from the image automatically in the next
38
+ image release, with no announcement, no deprecation notice, and no entry in the image
39
+ changelog.
40
+
41
+ **Real example:** `libevent` was present on `macos-15` images as a transitive dependency
42
+ of another documented formula. When that formula's dependency chain changed in the
43
+ `20260525.0142.1` image, `libevent` was removed. Workflows depending on `libevent`
44
+ (for building tmux from source, libevent-based C++ servers, etc.) began failing with
45
+ "No such file or directory" errors without any changes to the workflow itself.
46
+
47
+ GitHub's response (confirmed in runner-images#14170):
48
+ > "libevent has never been part of the documented Homebrew Formulae list. It was only
49
+ > present incidentally as a transitive dependency of another formula, and that
50
+ > dependency chain has changed in the newer image. Since libevent is not an officially
51
+ > preinstalled tool on the image, its presence is not guaranteed across image versions
52
+ > and we don't plan to pin it."
53
+
54
+ **This is by design and will not be fixed.** The GitHub runner-images team will not
55
+ guarantee transitive dependencies — only the explicitly documented formula list is stable.
56
+
57
+ Source: actions/runner-images#14170 (closed as `wontfix / not_planned`, May 2026).
58
+ fix: |
59
+ The only reliable fix is to **explicitly install every library your workflow needs**,
60
+ regardless of whether it "happens to be there" on the current image.
61
+
62
+ **Immediate fix:** Add `brew install <missing-package>` as a workflow step before
63
+ any step that requires the package:
64
+
65
+ **Long-term fix:** Audit ALL your workflow's Homebrew dependencies and cross-reference
66
+ each one against the official runner image README. Any package NOT listed there must be
67
+ explicitly installed in your workflow.
68
+
69
+ **Finding the image README:**
70
+ - macOS 15: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md
71
+ - macOS 26: https://github.com/actions/runner-images/blob/main/images/macos/macos-26-Readme.md
72
+ If your package isn't in the "Homebrew Packages" section of the README, install it
73
+ explicitly — it's not guaranteed.
74
+ fix_code:
75
+ - language: yaml
76
+ label: "Explicitly install transitive dependencies before use"
77
+ code: |
78
+ jobs:
79
+ build:
80
+ runs-on: macos-latest
81
+ steps:
82
+ - uses: actions/checkout@v4
83
+
84
+ # Explicitly install ALL required libraries — even ones that "used to be there"
85
+ - name: Install dependencies
86
+ run: |
87
+ brew install libevent libffi gettext
88
+ # Do NOT rely on transitive deps from other formulae
89
+
90
+ - name: Build
91
+ run: make
92
+ - language: yaml
93
+ label: "Audit step — verify dependencies are explicitly documented"
94
+ code: |
95
+ # Check if your dependency is in the official image README:
96
+ # curl -s https://raw.githubusercontent.com/actions/runner-images/main/images/macos/macos-15-Readme.md \
97
+ # | grep -i "libevent"
98
+ # If no output → the package is NOT guaranteed → add brew install
99
+
100
+ - name: Ensure all dependencies are installed
101
+ run: |
102
+ # Install everything your build actually needs
103
+ brew install libevent tmux pkg-config
104
+ - language: yaml
105
+ label: "Cache explicit brew installs to reduce per-job overhead"
106
+ code: |
107
+ - name: Cache Homebrew packages
108
+ uses: actions/cache@v4
109
+ with:
110
+ path: |
111
+ ~/Library/Caches/Homebrew
112
+ /opt/homebrew/Cellar
113
+ key: ${{ runner.os }}-brew-${{ hashFiles('Brewfile') }}
114
+ restore-keys: |
115
+ ${{ runner.os }}-brew-
116
+
117
+ - name: Install dependencies from Brewfile
118
+ run: brew bundle
119
+ prevention:
120
+ - "Never rely on a Homebrew package being preinstalled unless it is explicitly listed in the runner image's official README (linked below)."
121
+ - "Maintain a `Brewfile` in your repository and use `brew bundle` to install all macOS dependencies explicitly — this documents and enforces your true dependency set."
122
+ - "When a workflow starts failing on macOS runners after an image update, check the runner-images release notes for formula removals and cross-reference against the image README."
123
+ - "Subscribe to runner-images releases (GitHub → Watch → Releases) to get notified when the image README changes and transitive deps may be affected."
124
+ - "Run `brew deps --tree <your-installed-formula>` locally to identify which transitive deps your workflow relies on, then add explicit `brew install` calls for each."
125
+ docs:
126
+ - url: "https://github.com/actions/runner-images/issues/14170"
127
+ label: "runner-images#14170: macos-15 libevent removed as transitive dep (closed wontfix)"
128
+ - url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md"
129
+ label: "macOS 15 runner image README — official guaranteed software list"
130
+ - url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-26-Readme.md"
131
+ label: "macOS 26 runner image README — official guaranteed software list"
132
+ - url: "https://docs.brew.sh/Manpage#bundle-subcommand"
133
+ label: "Homebrew Bundle subcommand — manage dependencies via Brewfile"
@@ -0,0 +1,113 @@
1
+ id: known-unsolved-021
2
+ title: "secrets: inherit Does Not Cascade to Second-Level Nested Reusable Workflows"
3
+ category: known-unsolved
4
+ severity: silent-failure
5
+ tags:
6
+ - reusable-workflow
7
+ - secrets
8
+ - secrets-inherit
9
+ - nesting
10
+ - silent-failure
11
+
12
+ patterns:
13
+ - regex: "secret .+ is required, but not provided"
14
+ flags: "i"
15
+ - regex: "secrets\\.\\w+ is not a valid secret key"
16
+ flags: "i"
17
+
18
+ error_messages:
19
+ - "Secret GIT_PAT is required, but not provided"
20
+ - "Required secret 'MY_SECRET' was not provided by the caller"
21
+
22
+ root_cause: |
23
+ `secrets: inherit` in a caller workflow passes ALL repository and organization
24
+ secrets to the directly-called (first-level) reusable workflow. However, if that
25
+ reusable workflow then calls ANOTHER reusable workflow (second level), those
26
+ inherited secrets are NOT automatically forwarded to the second level.
27
+
28
+ Each `workflow_call` boundary is a discrete secrets scope. `secrets: inherit`
29
+ only covers one hop. If you have:
30
+
31
+ root.yml → (secrets: inherit) → level1.yml → level2.yml
32
+
33
+ then `level2.yml` receives an empty secrets context unless `level1.yml`
34
+ explicitly passes them via its own `secrets:` block.
35
+
36
+ This is a platform design decision, not a bug. GitHub has confirmed that
37
+ `secrets: inherit` does not cascade through multiple `workflow_call` layers.
38
+ There is no current mechanism for automatic multi-level secret propagation.
39
+
40
+ Community reports: actions/runner#2709 (open, labeled bug, 8 👍, 2023–2025),
41
+ community/discussions/23107.
42
+
43
+ fix: |
44
+ Explicitly declare and pass secrets at EVERY reusable workflow boundary.
45
+
46
+ For level1.yml to forward secrets to level2.yml, level1.yml must:
47
+ 1. Declare secrets in its on.workflow_call.secrets block.
48
+ 2. Pass those secrets explicitly in the jobs.*.secrets block when calling level2.yml.
49
+
50
+ Alternatively, use `secrets: inherit` at EACH level — but the calling workflow
51
+ (level1.yml) itself must also explicitly declare the secrets it expects so
52
+ they are available in its scope to pass down.
53
+
54
+ fix_code:
55
+ - language: yaml
56
+ label: "root.yml — caller uses secrets: inherit for first hop"
57
+ code: |
58
+ jobs:
59
+ call-level1:
60
+ uses: ./.github/workflows/level1.yml
61
+ secrets: inherit # passes ALL secrets to level1.yml only
62
+
63
+ - language: yaml
64
+ label: "level1.yml — must declare AND re-forward secrets to level2.yml"
65
+ code: |
66
+ on:
67
+ workflow_call:
68
+ secrets:
69
+ MY_SECRET:
70
+ required: true
71
+ DEPLOY_TOKEN:
72
+ required: false
73
+
74
+ jobs:
75
+ call-level2:
76
+ uses: ./.github/workflows/level2.yml
77
+ secrets:
78
+ MY_SECRET: ${{ secrets.MY_SECRET }} # explicit re-forward
79
+ DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }} # explicit re-forward
80
+
81
+ - language: yaml
82
+ label: "level2.yml — must declare secrets it expects"
83
+ code: |
84
+ on:
85
+ workflow_call:
86
+ secrets:
87
+ MY_SECRET:
88
+ required: true
89
+ DEPLOY_TOKEN:
90
+ required: false
91
+
92
+ jobs:
93
+ use-secrets:
94
+ runs-on: ubuntu-latest
95
+ steps:
96
+ - name: Use secret
97
+ run: echo "token length = ${#MY_SECRET}"
98
+ env:
99
+ MY_SECRET: ${{ secrets.MY_SECRET }}
100
+
101
+ prevention:
102
+ - "Audit every workflow_call boundary in nested reusable workflows — each hop must explicitly forward secrets."
103
+ - "Document required secrets at every level in workflow comments to avoid silent empty-string failures."
104
+ - "Use composite actions instead of nested reusable workflows when secrets do not need to cross job boundaries — composite actions share the parent job's secrets context automatically."
105
+ - "Test nested workflows by echoing a non-sensitive derived value (e.g., secret length) at each level to confirm propagation."
106
+
107
+ docs:
108
+ - url: "https://docs.github.com/en/actions/using-workflows/reusing-workflows#passing-secrets-to-nested-workflows"
109
+ label: "GitHub Docs — Passing secrets to nested workflows"
110
+ - url: "https://github.com/actions/runner/issues/2709"
111
+ label: "actions/runner#2709 — Passing secrets to reusable workflow does not work (open, 2023)"
112
+ - url: "https://github.com/orgs/community/discussions/23107"
113
+ label: "community/discussions#23107 — Inheriting secrets in reusable workflows"
@@ -0,0 +1,127 @@
1
+ id: runner-environment-057
2
+ title: "FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 Still Emits Node 20 Deprecation Annotation"
3
+ category: runner-environment
4
+ severity: warning
5
+ tags:
6
+ - node20
7
+ - node24
8
+ - deprecation
9
+ - annotation
10
+ - force-node24
11
+ - javascript-actions
12
+ patterns:
13
+ - regex: "Node\\.js 20 is deprecated.*following actions target Node\\.js 20 but are being forced to run on Node\\.js 24"
14
+ flags: "i"
15
+ - regex: "The following actions target Node\\.?20 but are being forced to run on Node\\.?24"
16
+ flags: "i"
17
+ - regex: "following actions are running on Node\\.js 20 and may not work as expected"
18
+ flags: "i"
19
+ error_messages:
20
+ - "Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: some-action@v1"
21
+ - "The following actions are running on Node.js 20 and may not work as expected: actions/cache@v3, custom-org/deploy@v2"
22
+ - "Node.js 20 actions are deprecated. The following actions are running on Node.js 20"
23
+ root_cause: |
24
+ Setting `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"` in a workflow's `env:` section
25
+ successfully redirects JavaScript actions that declare `using: node20` to execute on
26
+ Node.js 24 at runtime. However, the runner still emits a deprecation annotation at
27
+ the end of every job listing those actions.
28
+
29
+ **Two distinct annotation messages depending on runner version:**
30
+
31
+ - **Pre-runner v2.326 (before PR#4303):** Inaccurate message — "The following actions
32
+ are **running on** Node.js 20 and may not work as expected" — even though they are
33
+ actually executing on Node 24. This is a bug in the runner's deprecation tracking
34
+ which recorded actions before the `FORCE_` env var was resolved.
35
+
36
+ - **Post-runner v2.326 (after PR#4303 fix):** Accurate but still present message —
37
+ "Node.js 20 is deprecated. The following actions **target** Node.js 20 but are
38
+ being forced to run on Node.js 24" — this annotation correctly describes the
39
+ situation but continues to appear as long as any action declares `using: node20`.
40
+
41
+ **Why this matters:** The annotation appears as a warning in GitHub's UI, turning
42
+ affected jobs "yellow" or showing red annotation badges, causing developer confusion
43
+ about whether `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24` is working. CI dashboards that
44
+ treat any annotation as a failure (strict mode) will block PRs.
45
+
46
+ **Root cause of persistence:** The annotation fires based on the action's *declared*
47
+ `using` field in `action.yml` (`node20`), not the *actual runtime* used. Even with
48
+ the force env var, the declaration still exists until the action author updates and
49
+ publishes a new release with `using: node24`.
50
+
51
+ Source: actions/runner#4295 (9 reactions, April 2026), fixed partially in runner PR#4303.
52
+ fix: |
53
+ The only permanent fix is to eliminate the `using: node20` declaration from every
54
+ action listed in the annotation.
55
+
56
+ **If you control the action:**
57
+ Update `action.yml` to declare `runs.using: 'node24'`, recompile with Node 24, and
58
+ publish a new release. Downstream consumers must update their `uses:` pin.
59
+
60
+ **If you use a third-party action:**
61
+ Update to a newer version of the action that already ships `using: node24`. Check the
62
+ action's GitHub releases or `action.yml` on the latest tag.
63
+
64
+ **Temporary suppression (not recommended for long-term):**
65
+ Continue using `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"` — the action *does* run
66
+ on Node 24 despite the annotation. The annotation is informational. If you need
67
+ annotation-clean builds, the only path is action upgrades.
68
+
69
+ **Audit all actions in your workflow:**
70
+ Run this to find actions still declaring node20 in their action.yml:
71
+ ```bash
72
+ find . -name 'action.yml' -o -name 'action.yaml' | xargs grep -l 'using.*node20'
73
+ ```
74
+ fix_code:
75
+ - language: yaml
76
+ label: "Upgrade pinned actions to node24-compatible major versions"
77
+ code: |
78
+ # Before: actions declaring using: node20 → emits annotation even with FORCE_ var
79
+ steps:
80
+ - uses: actions/checkout@v3 # node20 → upgrade to @v4
81
+ - uses: actions/cache@v3 # node20 → upgrade to @v4
82
+ - uses: actions/upload-artifact@v3 # node20 → upgrade to @v4
83
+
84
+ # After: actions declaring using: node24 → no annotation
85
+ steps:
86
+ - uses: actions/checkout@v4 # node24 ✅
87
+ - uses: actions/cache@v4 # node24 ✅
88
+ - uses: actions/upload-artifact@v4 # node24 ✅
89
+ - language: yaml
90
+ label: "For your own action.yml — update to node24"
91
+ code: |
92
+ # action.yml — before
93
+ runs:
94
+ using: 'node20'
95
+ main: 'dist/index.js'
96
+
97
+ # action.yml — after
98
+ runs:
99
+ using: 'node24'
100
+ main: 'dist/index.js'
101
+ # Also recompile: ncc build src/index.ts --license licenses.txt
102
+ - language: yaml
103
+ label: "Temporary escape hatch — FORCE env var (annotation still appears)"
104
+ code: |
105
+ jobs:
106
+ build:
107
+ runs-on: ubuntu-latest
108
+ env:
109
+ # Actions run on Node 24 but annotation still fires for node20 declarations
110
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
111
+ steps:
112
+ - uses: actions/checkout@v4
113
+ prevention:
114
+ - "Pin to the latest major version of all official `actions/*` actions — they already ship `using: node24` in current releases."
115
+ - "Search your workflow files for `uses:` pins older than the current major version and update them in batch before Node 20 enforcement completes."
116
+ - "For private/internal actions, add a CI check that fails if any `action.yml` in the monorepo still declares `using: node20`."
117
+ - "Use `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true` only as a bridge, not a permanent solution — the annotation is a reminder that action.yml still needs updating."
118
+ - "Run periodic audits: `gh api /repos/ORG/REPO/contents/action.yml | jq .content | base64 -d | grep using`."
119
+ docs:
120
+ - url: "https://github.com/actions/runner/issues/4295"
121
+ label: "actions/runner#4295: Node 20 deprecation warning fires even with FORCE_JAVASCRIPT_ACTIONS_TO_NODE24"
122
+ - url: "https://github.com/actions/runner/pull/4303"
123
+ label: "actions/runner#4303: Node 24 enforcement + Linux ARM32 deprecation support (fix)"
124
+ - url: "https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/"
125
+ label: "GitHub Changelog: Deprecation of Node 20 on GitHub Actions runners"
126
+ - url: "https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#runs-for-javascript-actions"
127
+ label: "Metadata syntax: runs.using for JavaScript actions"
@@ -0,0 +1,158 @@
1
+ id: runner-environment-058
2
+ title: "macOS 26 Homebrew LLVM Jumps 18 → 20 — Hardcoded llvm@18 Paths Fail"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - macos-26
7
+ - macos-latest
8
+ - llvm
9
+ - clang
10
+ - homebrew
11
+ - runner-image
12
+ - breaking-change
13
+ - cpp
14
+ - cmake
15
+ patterns:
16
+ - regex: "no such file or directory.*homebrew.*opt.*llvm@(17|18)/bin"
17
+ flags: "i"
18
+ - regex: "clang(\\+\\+)?-(17|18).*command not found|No such file.*clang-(17|18)"
19
+ flags: "i"
20
+ - regex: "brew.*prefix.*llvm@(17|18).*Error.*no such keg"
21
+ flags: "i"
22
+ - regex: "Could not find.*LLVM (17|18).*Config\\.cmake"
23
+ flags: "i"
24
+ - regex: "llvm-config-(17|18).*not found"
25
+ flags: "i"
26
+ error_messages:
27
+ - "zsh: no such file or directory: /opt/homebrew/opt/llvm@18/bin/clang++"
28
+ - "Error: clang-18: command not found"
29
+ - "Error: No such keg: /opt/homebrew/Cellar/llvm@18"
30
+ - "CMake Error at /opt/homebrew/lib/cmake/llvm/LLVMConfig.cmake: LLVM 18.1 required but 20.1 found"
31
+ - "llvm-config-18: not found"
32
+ root_cause: |
33
+ When the `macos-latest` label migrated to macOS 26 Tahoe (beginning June 15, 2026),
34
+ the Homebrew-installed LLVM major version changed from **18.1.8** (on macOS 15) to
35
+ **20.1.8** (on macOS 26). This is a two-major-version jump that silently breaks any
36
+ workflow that hardcodes LLVM version numbers in paths, environment variables, or
37
+ CMake configuration.
38
+
39
+ **Affected patterns:**
40
+ - Shell scripts using `$(brew --prefix llvm@18)/bin/clang++` — the `llvm@18` keg no
41
+ longer exists on macOS 26; Homebrew returns "Error: No such keg"
42
+ - Workflows setting `CC=clang-18` or `CXX=clang++-18` — these binaries aren't
43
+ installed; the available binaries are `clang-20` and `clang++-20`
44
+ - CMake `find_package(LLVM 18 REQUIRED)` — succeeds on macOS 15 because Homebrew
45
+ LLVM 18 is present; fails on macOS 26 because only LLVM 20 is available
46
+ - `llvm-config-18 --version` in build scripts — the versioned binary doesn't exist
47
+ - `pkg-config --libs llvm-18` — the pkg-config file for llvm-18 is absent
48
+
49
+ **macOS 26 image ships with:**
50
+ - `llvm` formula → installs LLVM 20.x (unversioned `llvm` formula always tracks latest)
51
+ - `llvm@20` → available for explicit `brew install llvm@20`
52
+ - No `llvm@18` keg in the default image
53
+
54
+ Note: Workflows using the *unversioned* `llvm` or `clang` commands (e.g., `CC=clang`,
55
+ `$(brew --prefix llvm)/bin/clang++`) are NOT affected — they pick up the default
56
+ LLVM version on each image automatically.
57
+
58
+ Source: runner-images#14167 release diff table (Clang/LLVM 18.1.8 → 20.1.8);
59
+ community migration example: POCO C++ Libraries commit ff8174d (April 2026).
60
+ fix: |
61
+ Replace all hardcoded `llvm@18` / `clang-18` references with either the unversioned
62
+ `llvm` formula path or the explicit `llvm@20` path on macOS 26.
63
+
64
+ **Option 1 — Use the unversioned Homebrew prefix (recommended):**
65
+ Replace `$(brew --prefix llvm@18)` with `$(brew --prefix llvm)` — this always resolves
66
+ to the current default LLVM, making the workflow future-proof.
67
+
68
+ **Option 2 — Explicit llvm@20 for reproducibility:**
69
+ Install `llvm@20` explicitly and reference it by version. This avoids future surprises
70
+ when `llvm` bumps to 21+.
71
+
72
+ **Option 3 — Pin to macos-15 temporarily:**
73
+ If the migration is not immediately feasible, pin to `macos-15` while updating your
74
+ build system to use the unversioned LLVM path.
75
+
76
+ **For CMake projects:** Remove the version constraint from `find_package(LLVM X REQUIRED)`
77
+ or use `find_package(LLVM REQUIRED)` and check the found version at configure time.
78
+ fix_code:
79
+ - language: yaml
80
+ label: "Use unversioned llvm prefix — works across all macOS runner versions"
81
+ code: |
82
+ jobs:
83
+ build:
84
+ runs-on: macos-latest
85
+ steps:
86
+ - uses: actions/checkout@v4
87
+
88
+ - name: Install LLVM
89
+ run: brew install llvm # installs current default (llvm@20 on macOS 26)
90
+
91
+ - name: Build
92
+ run: |
93
+ # Use unversioned prefix — future-proof across LLVM major bumps
94
+ LLVM_PREFIX=$(brew --prefix llvm)
95
+ export CC="$LLVM_PREFIX/bin/clang"
96
+ export CXX="$LLVM_PREFIX/bin/clang++"
97
+ export LDFLAGS="-L$LLVM_PREFIX/lib"
98
+ export CPPFLAGS="-I$LLVM_PREFIX/include"
99
+ make -j$(sysctl -n hw.logicalcpu)
100
+ - language: yaml
101
+ label: "Explicit llvm@20 for reproducible macOS 26 builds"
102
+ code: |
103
+ jobs:
104
+ build:
105
+ runs-on: macos-latest # macOS 26
106
+ steps:
107
+ - uses: actions/checkout@v4
108
+
109
+ - name: Install LLVM 20
110
+ run: brew install llvm@20
111
+
112
+ - name: Configure and build
113
+ run: |
114
+ export CC="$(brew --prefix llvm@20)/bin/clang"
115
+ export CXX="$(brew --prefix llvm@20)/bin/clang++"
116
+ cmake -B build \
117
+ -DCMAKE_C_COMPILER="$CC" \
118
+ -DCMAKE_CXX_COMPILER="$CXX" \
119
+ -DLLVM_DIR="$(brew --prefix llvm@20)/lib/cmake/llvm"
120
+ cmake --build build --parallel
121
+ - language: yaml
122
+ label: "CMake: remove version constraint from find_package(LLVM)"
123
+ code: |
124
+ # CMakeLists.txt — before
125
+ find_package(LLVM 18 REQUIRED CONFIG)
126
+
127
+ # CMakeLists.txt — after (accepts any version)
128
+ find_package(LLVM REQUIRED CONFIG)
129
+ message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
130
+ # Optionally enforce a minimum version:
131
+ if(LLVM_VERSION_MAJOR LESS 18)
132
+ message(FATAL_ERROR "LLVM >= 18 required, got ${LLVM_PACKAGE_VERSION}")
133
+ endif()
134
+ - language: yaml
135
+ label: "Pin to macos-15 as temporary rollback while migrating"
136
+ code: |
137
+ jobs:
138
+ build:
139
+ # Temporary: macOS 15 still has llvm@18 via Homebrew
140
+ # TODO: migrate to unversioned llvm and switch back to macos-latest
141
+ runs-on: macos-15
142
+ steps:
143
+ - uses: actions/checkout@v4
144
+ prevention:
145
+ - "Never hardcode LLVM version numbers in Homebrew prefix paths. Use `$(brew --prefix llvm)` for the current default or `$(brew --prefix llvm@XX)` with an explicit install step for reproducibility."
146
+ - "In CMakeLists.txt, use `find_package(LLVM REQUIRED CONFIG)` without a version constraint, and validate the found version at configure time instead."
147
+ - "Test your macOS CI against `macos-26` (or `macos-latest` after it transitions) before the migration completes — use a matrix build to run both images in parallel."
148
+ - "Audit all workflow files for hardcoded `clang-XX`, `llvm@XX`, or `llvm-config-XX` strings when macOS runner images announce major tool version changes."
149
+ - "Subscribe to runner-images releases to monitor Homebrew LLVM version changes in the release diff tables."
150
+ docs:
151
+ - url: "https://github.com/actions/runner-images/issues/14167"
152
+ label: "runner-images#14167: macos-latest will use macos-26 in June 2026 (diff table shows LLVM 18 → 20)"
153
+ - url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md"
154
+ label: "macOS 26 arm64 image README — full software list including LLVM version"
155
+ - url: "https://docs.brew.sh/Versions"
156
+ label: "Homebrew Docs: Versioned formulae (llvm@18, llvm@20, etc.)"
157
+ - url: "https://cmake.org/cmake/help/latest/command/find_package.html"
158
+ label: "CMake find_package documentation"
@@ -0,0 +1,102 @@
1
+ id: runner-environment-059
2
+ title: "Org-Level Self-Hosted Runner in Group Never Dispatched — Job Queued Indefinitely"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - self-hosted-runner
7
+ - runner-group
8
+ - org-runner
9
+ - queued
10
+ - dispatch
11
+
12
+ patterns:
13
+ - regex: "no runner.*matching.*label.*self-hosted"
14
+ flags: "i"
15
+ - regex: "runner_group_id.*null"
16
+ flags: "i"
17
+
18
+ error_messages:
19
+ - "Can't find any online and idle self-hosted runner in the current repository, account/organization that matches the required labels: 'self-hosted, <group-name>'"
20
+ - "Waiting for a runner to pick up this job..."
21
+
22
+ root_cause: |
23
+ When a self-hosted runner is registered at the ORGANIZATION level and placed into
24
+ a runner group that has explicit repository access, the GitHub Actions dispatcher
25
+ sometimes fails to resolve the runner's group membership within the target
26
+ repository's scope. The job's metadata shows runner_group_id: null throughout the
27
+ entire wait period, meaning the internal broker never matched the org-level runner
28
+ to the queued job.
29
+
30
+ This affects runners using the V2 broker protocol
31
+ (broker.actions.githubusercontent.com) on GitHub Team and Enterprise plans.
32
+ The runner appears "Online" in the org settings, the runner group lists the target
33
+ repository as allowed, and the runs-on labels match — yet the job never starts.
34
+
35
+ Root technical cause: the dispatcher resolves runner group membership differently
36
+ for org-scoped runners vs. repo-scoped runners. When the runner is registered at
37
+ org scope, the broker does not propagate its group_id to the queued job record,
38
+ so no assignment occurs.
39
+
40
+ fix: |
41
+ Short-term workaround (immediate):
42
+ Re-register the runner at the REPOSITORY level instead of the organization level.
43
+ This bypasses the group dispatch path and the job is assigned immediately.
44
+
45
+ Long-term fix:
46
+ 1. Monitor GitHub Actions runner releases for a fix to org-level group dispatch.
47
+ 2. Use GitHub-hosted larger runners or runner scale sets (Actions Runner Controller)
48
+ for org-level sharing — these use a different dispatch mechanism that is not
49
+ affected by this bug.
50
+ 3. If org-level management is required, use runner groups with repo-scoped runner
51
+ registration and rely on group access policies to control visibility.
52
+
53
+ fix_code:
54
+ - language: yaml
55
+ label: "Re-register runner at repository level (workaround)"
56
+ code: |
57
+ # 1. Remove the runner from the org-level runner list in GitHub UI:
58
+ # Settings → Actions → Runners → (select runner) → Remove runner
59
+ #
60
+ # 2. Re-register the runner at the REPO level:
61
+ # <repo> → Settings → Actions → Runners → New self-hosted runner
62
+ # Follow setup commands shown in the UI.
63
+ #
64
+ # 3. Your workflow runs-on stays the same:
65
+ jobs:
66
+ build:
67
+ runs-on: [self-hosted, my-runner-label]
68
+ steps:
69
+ - uses: actions/checkout@v4
70
+
71
+ - language: yaml
72
+ label: "Use Actions Runner Controller (ARC) for org-level runners"
73
+ code: |
74
+ # ARC scale sets are not affected by the org-runner group dispatch bug.
75
+ # Install the controller chart and create a runner scale set:
76
+ #
77
+ # helm install arc-runner-set \
78
+ # --namespace arc-runners \
79
+ # oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set \
80
+ # --set githubConfigUrl=https://github.com/<org> \
81
+ # --set githubConfigSecret.github_token=<token>
82
+ #
83
+ # Then reference in your workflow:
84
+ jobs:
85
+ build:
86
+ runs-on: arc-runner-set
87
+ steps:
88
+ - uses: actions/checkout@v4
89
+
90
+ prevention:
91
+ - "Register self-hosted runners at repository level when possible to avoid org-level dispatch issues."
92
+ - "After registering a runner, trigger a test workflow immediately to confirm dispatch before relying on it in production."
93
+ - "Use Actions Runner Controller (ARC) scale sets for org-wide shared runners — ARC bypasses the runner group dispatch path."
94
+ - "Check runner_group_id via the API (`GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs`) when a job is stuck — null means dispatch failed at the broker level."
95
+
96
+ docs:
97
+ - url: "https://github.com/actions/runner/issues/4429"
98
+ label: "actions/runner#4429 — Org-level runner never dispatched despite correct group access (May 2026)"
99
+ - url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners"
100
+ label: "GitHub Docs — Runner registration scopes"
101
+ - url: "https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-self-hosted-runners-in-a-workflow"
102
+ label: "GitHub Docs — Using self-hosted runners in a workflow"
@@ -0,0 +1,110 @@
1
+ id: silent-failures-027
2
+ title: "actions/setup-python pip Cache on macOS 26 Emits False Error Annotation"
3
+ category: silent-failures
4
+ severity: warning
5
+ tags:
6
+ - setup-python
7
+ - pip
8
+ - cache
9
+ - macos-26
10
+ - annotation
11
+ - false-positive
12
+ - python310
13
+ patterns:
14
+ - regex: "ERROR.*WARNING.*Cache entry deserialization failed.*entry ignored"
15
+ flags: "i"
16
+ - regex: "Cache entry deserialization failed.*entry ignored"
17
+ flags: "i"
18
+ - regex: "Error: WARNING:.*cache.*deserialization"
19
+ flags: "i"
20
+ error_messages:
21
+ - "Error: WARNING: Cache entry deserialization failed, entry ignored."
22
+ - "WARNING: Cache entry deserialization failed, entry ignored"
23
+ root_cause: |
24
+ When using `actions/setup-python@v6` with `cache: 'pip'` and an older Python version
25
+ (notably Python 3.10) on `macos-26` runners, the action succeeds but emits a false
26
+ error annotation in the GitHub Actions UI, turning the job "yellow" or showing a red
27
+ annotation badge.
28
+
29
+ **What happens:**
30
+ 1. `setup-python@v6` restores the pip cache from a previous run.
31
+ 2. pip on the current macOS 26 runner (with a newer pip version) encounters a pip
32
+ wheel cache entry written by an older pip version using a different serialization
33
+ format or metadata schema.
34
+ 3. pip emits: `WARNING: Cache entry deserialization failed, entry ignored` to stderr.
35
+ 4. The GitHub Actions runner's annotation parser sees the word "Error" at the start
36
+ of the output (because the line is rendered as `Error: WARNING: ...` in GitHub's
37
+ log viewer) and creates an annotation treating it as a job error.
38
+ 5. The job itself succeeds — the dependency install works fine — but the annotation
39
+ makes the job appear failed or degraded in the GitHub UI.
40
+
41
+ **Platform specificity:** This is reproducible specifically on `macos-26` (ARM), not
42
+ on Ubuntu, Windows, or `macos-15`. The combination of macOS 26's newer system Python
43
+ environment and the `macos-26` Arm64 pip wheel cache schema causes the deserialization
44
+ mismatch.
45
+
46
+ Source: actions/setup-python#1317 (open bug, May 20 2026 — under investigation by
47
+ actions/setup-python maintainers).
48
+ fix: |
49
+ **Option 1 — Clear the stale pip cache (immediate fix):**
50
+ Purge the GitHub Actions cache for the affected key via the UI or API, forcing a cache
51
+ rebuild on the next run. The fresh cache will be written by the current pip version on
52
+ macOS 26 and will deserialize cleanly on subsequent runs.
53
+
54
+ **Option 2 — Disable pip caching for macOS 26 until resolved:**
55
+ Use a conditional `cache` input based on the runner OS:
56
+
57
+ **Option 3 — Pin to a Python version not affected:**
58
+ Python 3.12 and 3.14 have not been reported to exhibit this issue on macOS 26 — only
59
+ 3.10 is confirmed. Test whether upgrading your target Python version resolves the annotation.
60
+
61
+ **Option 4 — Wait for the upstream fix:**
62
+ This is an open bug in `actions/setup-python` being investigated (issue #1317). A fix
63
+ in `setup-python@v6` will resolve this without workflow changes.
64
+ fix_code:
65
+ - language: yaml
66
+ label: "Disable pip cache on macOS to avoid false error annotation"
67
+ code: |
68
+ - name: Set up Python
69
+ uses: actions/setup-python@v6
70
+ with:
71
+ python-version: "3.10"
72
+ # Disable cache on macOS 26 until setup-python#1317 is resolved
73
+ cache: ${{ runner.os != 'macOS' && 'pip' || '' }}
74
+ - language: yaml
75
+ label: "Clear the stale cache via GitHub API (one-time fix)"
76
+ code: |
77
+ # Delete the stale pip cache key via gh CLI (run once)
78
+ gh cache list --repo owner/repo --key 'setup-python-*macos-26*'
79
+ gh cache delete <CACHE_ID> --repo owner/repo
80
+ # Or delete all pip caches for macOS 26:
81
+ gh cache list --repo owner/repo --json id,key --jq \
82
+ '.[] | select(.key | test("macos-26")) | .id' \
83
+ | xargs -I{} gh cache delete {} --repo owner/repo
84
+ - language: yaml
85
+ label: "Matrix build: cache only on platforms where it works cleanly"
86
+ code: |
87
+ jobs:
88
+ test:
89
+ strategy:
90
+ matrix:
91
+ os: [ubuntu-latest, windows-latest, macos-26]
92
+ runs-on: ${{ matrix.os }}
93
+ steps:
94
+ - uses: actions/setup-python@v6
95
+ with:
96
+ python-version: "3.10"
97
+ # macOS 26 pip cache has deserialization issue (setup-python#1317)
98
+ cache: ${{ matrix.os != 'macos-26' && 'pip' || '' }}
99
+ prevention:
100
+ - "Watch for `actions/setup-python` releases fixing issue #1317 — once resolved, re-enable caching on macOS 26."
101
+ - "When a new macOS runner label becomes `macos-latest`, clear pip caches from the old image version to avoid deserialization mismatches on the first run."
102
+ - "Test your workflows on new macOS runner labels before `macos-latest` transitions — catch cache format incompatibilities before they affect production CI."
103
+ - "Use GitHub's cache eviction API or `actions/cache@v4` with `fail-on-cache-miss: false` to gracefully handle deserialization failures."
104
+ docs:
105
+ - url: "https://github.com/actions/setup-python/issues/1317"
106
+ label: "actions/setup-python#1317: Cache entry deserialization failed on macOS 26 (open bug)"
107
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#managing-caches"
108
+ label: "GitHub Docs: Managing GitHub Actions caches"
109
+ - url: "https://github.com/actions/setup-python"
110
+ label: "actions/setup-python — official action repository"
@@ -0,0 +1,114 @@
1
+ id: triggers-019
2
+ title: "workflow_run-Triggered Job Checks Out Default Branch, Not the Triggering PR's Branch"
3
+ category: triggers
4
+ severity: silent-failure
5
+ tags:
6
+ - workflow_run
7
+ - checkout
8
+ - default-branch
9
+ - silent-failure
10
+ - pull-request
11
+
12
+ patterns:
13
+ - regex: "workflow_run.*head_branch"
14
+ flags: "i"
15
+ - regex: "github\\.event\\.workflow_run\\.head_branch"
16
+ flags: "i"
17
+
18
+ error_messages:
19
+ - "# No error message — the job silently runs against the wrong branch (e.g., main instead of the PR's feature branch)"
20
+ - "HEAD is now at <main-branch-commit> — expected feature branch content not present"
21
+
22
+ root_cause: |
23
+ When a workflow is triggered via `workflow_run`, the triggered workflow ALWAYS
24
+ runs in the context of the repository's DEFAULT branch, not the branch that
25
+ caused the original workflow to run.
26
+
27
+ This means that `actions/checkout` without an explicit `ref:` will check out
28
+ the default branch (e.g., `main`), even when the triggering workflow ran on a
29
+ feature branch or PR. The job may silently pass because it's testing old code
30
+ on `main` rather than the developer's new changes.
31
+
32
+ This is by design: `workflow_run` is intended for privileged workflows that
33
+ run in the base repository context regardless of where the triggering push came
34
+ from. It avoids giving fork PRs access to secrets — but it also means the
35
+ checkout behavior surprises developers expecting to test branch code.
36
+
37
+ The branch of the triggering workflow IS available via the event context:
38
+ `github.event.workflow_run.head_branch`
39
+ `github.event.workflow_run.head_sha`
40
+
41
+ fix: |
42
+ Explicitly set the `ref:` in your `actions/checkout` step to the triggering
43
+ workflow's head commit SHA or branch name.
44
+
45
+ Use `head_sha` (not `head_branch`) for more precise pinning — branch names
46
+ can advance between trigger and checkout for busy repositories.
47
+
48
+ fix_code:
49
+ - language: yaml
50
+ label: "Checkout the triggering workflow's exact commit"
51
+ code: |
52
+ on:
53
+ workflow_run:
54
+ workflows: ["CI — Unit Tests"]
55
+ types: [completed]
56
+
57
+ jobs:
58
+ deploy:
59
+ runs-on: ubuntu-latest
60
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ with:
64
+ # Use head_sha for precise pinning — not head_branch
65
+ ref: ${{ github.event.workflow_run.head_sha }}
66
+
67
+ - language: yaml
68
+ label: "Download artifacts from the triggering workflow run instead of re-checking out"
69
+ code: |
70
+ # For deployment workflows, prefer downloading the build artifact
71
+ # from the triggering run rather than re-building from source.
72
+ # This avoids the branch checkout problem entirely.
73
+ jobs:
74
+ deploy:
75
+ runs-on: ubuntu-latest
76
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
77
+ steps:
78
+ - uses: actions/download-artifact@v4
79
+ with:
80
+ run-id: ${{ github.event.workflow_run.id }}
81
+ name: build-output
82
+ github-token: ${{ secrets.GITHUB_TOKEN }}
83
+ - name: Deploy
84
+ run: ./deploy.sh
85
+
86
+ - language: yaml
87
+ label: "Guard against running on wrong branch with a condition"
88
+ code: |
89
+ jobs:
90
+ deploy:
91
+ runs-on: ubuntu-latest
92
+ # Only deploy when triggered from the main branch to avoid
93
+ # accidentally deploying non-main code
94
+ if: |
95
+ github.event.workflow_run.conclusion == 'success' &&
96
+ github.event.workflow_run.head_branch == 'main'
97
+ steps:
98
+ - uses: actions/checkout@v4
99
+ with:
100
+ ref: ${{ github.event.workflow_run.head_sha }}
101
+
102
+ prevention:
103
+ - "Always specify ref: ${{ github.event.workflow_run.head_sha }} in checkout steps inside workflow_run-triggered jobs."
104
+ - "Prefer downloading build artifacts over re-checking-out source code in workflow_run jobs to avoid branch confusion."
105
+ - "Log github.event.workflow_run.head_branch and head_sha at the start of workflow_run jobs for debugging."
106
+ - "Use the conclusion check (if: github.event.workflow_run.conclusion == 'success') to avoid deploying failed builds."
107
+
108
+ docs:
109
+ - url: "https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run"
110
+ label: "GitHub Docs — workflow_run event"
111
+ - url: "https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow"
112
+ label: "GitHub Docs — Using data from the triggering workflow"
113
+ - url: "https://stackoverflow.com/questions/76184351"
114
+ label: "SO#76184351 — workflow_run job runs on wrong (default) branch"
@@ -0,0 +1,113 @@
1
+ id: yaml-syntax-024
2
+ title: "Reusable Workflow Nesting Exceeds Maximum Depth of 4 Levels"
3
+ category: yaml-syntax
4
+ severity: error
5
+ tags:
6
+ - reusable-workflow
7
+ - nesting
8
+ - depth-limit
9
+ - workflow_call
10
+ - yaml-parse-error
11
+
12
+ patterns:
13
+ - regex: "would exceed the limit on called workflow depth of \\d+"
14
+ flags: "i"
15
+ - regex: "calls workflow .+, but doing so would exceed the limit"
16
+ flags: "i"
17
+
18
+ error_messages:
19
+ - "error parsing called workflow \"./.github/workflows/deploy.yml@\": job \"build\" calls workflow \"./.github/workflows/release.yml@\", but doing so would exceed the limit on called workflow depth of 3"
20
+ - "but doing so would exceed the limit on called workflow depth of 3"
21
+
22
+ root_cause: |
23
+ GitHub Actions enforces a maximum reusable workflow call depth of 4 levels total.
24
+ The top-level workflow counts as level 1, so the maximum number of sequential
25
+ workflow_call hops is 3 (levels 2, 3, and 4).
26
+
27
+ The error message says "depth of 3" because it refers to the maximum allowed
28
+ zero-indexed depth of called workflows, not the total chain length. When your
29
+ chain would require a 4th call (fifth total workflow), GitHub rejects the YAML
30
+ at parse time — before any runner picks up the job.
31
+
32
+ Example chain that fails:
33
+ root.yml → a.yml → b.yml → c.yml → d.yml (depth index 4 → rejected)
34
+
35
+ Example chain that succeeds:
36
+ root.yml → a.yml → b.yml → c.yml (depth index 3 → allowed)
37
+
38
+ This limit was increased from 2 to 3 in August 2022 and is currently fixed at 4
39
+ total levels (depth index 0–3).
40
+
41
+ fix: |
42
+ Reduce the nesting depth so the total chain is 4 levels or fewer.
43
+ Strategies:
44
+
45
+ 1. Flatten: merge two deeply-nested reusable workflows into one.
46
+ 2. Convert inner reusables to composite actions — composite actions do NOT
47
+ count toward the reusable workflow depth limit.
48
+ 3. Restructure so leaf workflows are composite actions, keeping reusable
49
+ workflows only at the top layers.
50
+
51
+ fix_code:
52
+ - language: yaml
53
+ label: "Replace inner reusable workflow with a composite action"
54
+ code: |
55
+ # Instead of calling another reusable workflow at depth 4,
56
+ # use a composite action in .github/actions/my-task/action.yml
57
+ # which has no depth limit.
58
+
59
+ # .github/actions/my-task/action.yml
60
+ name: My Task
61
+ description: Previously a reusable workflow, now a composite action
62
+ runs:
63
+ using: composite
64
+ steps:
65
+ - name: Do the work
66
+ shell: bash
67
+ run: echo "doing the work"
68
+
69
+ # Called from the deeply-nested workflow:
70
+ - name: Run my task
71
+ uses: ./.github/actions/my-task # composite, no depth counted
72
+
73
+ - language: yaml
74
+ label: "Flatten two reusable workflows into one to reduce depth"
75
+ code: |
76
+ # Before (depth 4 — fails):
77
+ # root.yml → build.yml → test.yml → lint.yml → scan.yml
78
+ #
79
+ # After (depth 3 — passes):
80
+ # Merge lint.yml and scan.yml into a single quality.yml
81
+
82
+ # quality.yml
83
+ on:
84
+ workflow_call:
85
+ inputs:
86
+ target:
87
+ required: true
88
+ type: string
89
+ jobs:
90
+ lint:
91
+ runs-on: ubuntu-latest
92
+ steps:
93
+ - uses: actions/checkout@v4
94
+ - run: echo "linting ${{ inputs.target }}"
95
+ scan:
96
+ runs-on: ubuntu-latest
97
+ steps:
98
+ - uses: actions/checkout@v4
99
+ - run: echo "scanning ${{ inputs.target }}"
100
+
101
+ prevention:
102
+ - "Map your reusable workflow call chain before writing YAML — count total levels."
103
+ - "Prefer composite actions for leaf-level tasks; they have no depth limit."
104
+ - "Limit reusable workflow use to high-value shared orchestration layers, not every step."
105
+ - "If depth 4 is genuinely required, consider splitting the pipeline into separate triggered workflows using workflow_run instead of nested workflow_call."
106
+
107
+ docs:
108
+ - url: "https://docs.github.com/en/actions/using-workflows/reusing-workflows#nesting-reusable-workflows"
109
+ label: "GitHub Docs — Nesting reusable workflows"
110
+ - url: "https://github.blog/changelog/2022-08-22-github-actions-improvements-to-reusable-workflows-2/"
111
+ label: "GitHub Changelog — Nesting increased to 4 levels (August 2022)"
112
+ - url: "https://github.com/actions/runner/issues/1797"
113
+ label: "actions/runner#1797 — Original depth-limit enhancement request"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@htekdev/actions-debugger",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "65+ real GitHub Actions errors, queryable by agents. MCP server + Copilot skills + error database.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",