{
  "version": 2,
  "minor": 0,
  "howToUse": {
    "instruction": "Ask the person which of these two paths they want, then follow that path's steps. Ask before you install anything. If you have nobody to ask, take the path named in defaultOptionId.",
    "defaultOptionId": "rules-only",
    "options": [
      {
        "id": "with-skill",
        "summary": "Install the StarSling skills and let them run the detectors. One install command, then a slash command does the audit: the detection logic stays maintained upstream, and the runtime rules that read GitHub Actions run history are covered.",
        "install": "npx skills add starslingdev/skills",
        "steps": [
          "Run the command in this option's install field. It is the only place this document carries it.",
          "Run /ci-speedup for speed and cost, /ci-secure for the security rules, or /ci-score to grade the configuration against the pass-or-fail checks.",
          "Review what it reports and open the fixes as a reviewable pull request."
        ]
      },
      {
        "id": "rules-only",
        "summary": "Apply the rules straight from these pages with nothing installed. Each rule page carries its own detection steps, fix, and verification, so a static rule needs only the repository in front of you; a runtime or hybrid rule also needs GitHub Actions run history, which you fetch yourself from the API.",
        "install": null,
        "steps": [
          "Read the rules array below and pick the rules whose detectionMode your context supports: static needs repository contents alone, runtime needs GitHub Actions run history, hybrid needs both.",
          "Fetch each chosen rule's markdown URL.",
          "Follow that page's detection instructions -- headed \"How to detect it\" on an optimization page and \"Verify on your repo\" on a best-practice one -- and record the evidence behind each finding: the workflow file and line for a static rule, the run or job it came from for a runtime one.",
          "Apply the page's fix for the findings that hold, then open them as a reviewable pull request."
        ]
      }
    ]
  },
  "skills": [
    {
      "name": "ci-speedup",
      "url": "https://starsling.dev/skills/ci-speedup",
      "description": "Reads your GitHub Actions run history and finds what is costing you wall-clock, then opens the fix as a reviewable pull request."
    },
    {
      "name": "ci-secure",
      "url": "https://starsling.dev/skills/ci-secure",
      "description": "Checks your workflows against the ten critical attack vectors an outsider can reach."
    },
    {
      "name": "ci-score",
      "url": "https://starsling.dev/skills/ci-score",
      "description": "Grades your workflow configuration against eleven pass-or-fail checks and reports the full breakdown."
    }
  ],
  "rules": [
    {
      "id": "ci.cache.dependency-cache",
      "title": "Dependency caching",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/cache-dependencies",
      "markdown": "/best-practices/github-actions/cache-dependencies.md",
      "patternIds": [
        {
          "id": "OPT61",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT63",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.checkout.shallow-clone",
      "title": "Shallow checkout",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/shallow-checkout",
      "markdown": "/best-practices/github-actions/shallow-checkout.md",
      "patternIds": [
        {
          "id": "OPT28",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.parallel.test-sharding",
      "title": "Test sharding",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/shard-tests",
      "markdown": "/best-practices/github-actions/shard-tests.md",
      "patternIds": [
        {
          "id": "OPT24",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.build.change-scoped",
      "title": "Change-scoped builds",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/build-only-affected",
      "markdown": "/best-practices/github-actions/build-only-affected.md",
      "patternIds": [
        {
          "id": "OPT70",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.trigger.path-filter",
      "title": "Path filters",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/path-filter-workflows",
      "markdown": "/best-practices/github-actions/path-filter-workflows.md",
      "patternIds": [
        {
          "id": "OPT32",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.trigger.cancel-superseded",
      "title": "Superseded runs cancelled",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/cancel-superseded-runs",
      "markdown": "/best-practices/github-actions/cancel-superseded-runs.md",
      "patternIds": [
        {
          "id": "OPT45",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT46",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT44",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "hybrid",
      "retired": false
    },
    {
      "id": "ci.trigger.concurrency-groups",
      "title": "Concurrency groups",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/cut-queue-time",
      "markdown": "/best-practices/github-actions/cut-queue-time.md",
      "patternIds": [
        {
          "id": "OPT43",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.hygiene.job-timeouts",
      "title": "Job timeouts",
      "category": "reliability",
      "family": "best-practice",
      "url": "/best-practices/github-actions/bound-job-timeouts",
      "markdown": "/best-practices/github-actions/bound-job-timeouts.md",
      "patternIds": [
        {
          "id": "OPT57",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.security.scoped-id-token",
      "title": "Scoped OIDC id-token",
      "category": "security",
      "family": "best-practice",
      "url": "/best-practices/github-actions/scope-id-token-per-job",
      "markdown": "/best-practices/github-actions/scope-id-token-per-job.md",
      "patternIds": [
        {
          "id": "P14.8",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.security.pinned-action-shas",
      "title": "Pinned action SHAs",
      "category": "security",
      "family": "best-practice",
      "url": "/best-practices/github-actions/pin-action-shas",
      "markdown": "/best-practices/github-actions/pin-action-shas.md",
      "patternIds": [
        {
          "id": "P5.1",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.hygiene.advisory-non-blocking",
      "title": "Advisory checks non-blocking",
      "category": "cost",
      "family": "best-practice",
      "url": "/best-practices/github-actions/keep-advisory-checks-non-blocking",
      "markdown": "/best-practices/github-actions/keep-advisory-checks-non-blocking.md",
      "patternIds": [
        {
          "id": "OPT71",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.runner.right-sizing",
      "title": "Right-sized runners",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/right-size-runners",
      "markdown": "/best-practices/github-actions/right-size-runners.md",
      "patternIds": [
        {
          "id": "OPT66",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.hygiene.polling-waits",
      "title": "Polling waits, not fixed sleeps",
      "category": "performance",
      "family": "best-practice",
      "url": "/best-practices/github-actions/replace-fixed-sleeps-with-polling",
      "markdown": "/best-practices/github-actions/replace-fixed-sleeps-with-polling.md",
      "patternIds": [
        {
          "id": "OPT19",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.hygiene.container-healthchecks",
      "title": "Container healthchecks",
      "category": "reliability",
      "family": "best-practice",
      "url": "/best-practices/github-actions/wait-for-container-healthchecks",
      "markdown": "/best-practices/github-actions/wait-for-container-healthchecks.md",
      "patternIds": [
        {
          "id": "OPT17",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.security.workflow-permissions",
      "title": "Scoped workflow permissions",
      "category": "security",
      "family": "best-practice",
      "url": "/best-practices/github-actions/limit-github-actions-permissions",
      "markdown": "/best-practices/github-actions/limit-github-actions-permissions.md",
      "patternIds": [
        {
          "id": "P5.5",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        },
        {
          "id": "P14.3",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.security.secret-handling",
      "title": "Secret handling",
      "category": "security",
      "family": "best-practice",
      "url": "/best-practices/github-actions/protect-github-actions-secrets",
      "markdown": "/best-practices/github-actions/protect-github-actions-secrets.md",
      "patternIds": [
        {
          "id": "P14.12",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        },
        {
          "id": "P14.14",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/security-patterns.md"
        },
        {
          "id": "P14.17",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        },
        {
          "id": "P14.19",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/security-patterns.md"
        },
        {
          "id": "P14.22",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.security.pull-request-target",
      "title": "pull_request_target safety",
      "category": "security",
      "family": "best-practice",
      "url": "/best-practices/github-actions/secure-pull-request-target",
      "markdown": "/best-practices/github-actions/secure-pull-request-target.md",
      "patternIds": [
        {
          "id": "P14.7",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/security-patterns.md"
        },
        {
          "id": "P14.9",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/security-patterns.md"
        },
        {
          "id": "P14.18",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/security-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.security.cache-isolation",
      "title": "Cache poisoning prevention",
      "category": "security",
      "family": "best-practice",
      "url": "/best-practices/github-actions/prevent-github-actions-cache-poisoning",
      "markdown": "/best-practices/github-actions/prevent-github-actions-cache-poisoning.md",
      "patternIds": [
        {
          "id": "P14.7",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/security-patterns.md"
        },
        {
          "id": "P8.3",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-secure/references/why-these-ten.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.cache.turborepo",
      "title": "Turborepo cache health",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/optimize-turborepo",
      "markdown": "/github-actions/optimizations/optimize-turborepo.md",
      "patternIds": [
        {
          "id": "OPT3",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT41",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT42",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT52",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT53",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT58",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT59",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT60",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.cache.npm-install",
      "title": "npm install caching",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/optimize-npm-install",
      "markdown": "/github-actions/optimizations/optimize-npm-install.md",
      "patternIds": [
        {
          "id": "OPT1",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT2",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT9",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.cache.pnpm-store",
      "title": "pnpm store caching",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/optimize-pnpm-install",
      "markdown": "/github-actions/optimizations/optimize-pnpm-install.md",
      "patternIds": [
        {
          "id": "OPT5",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT7",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT54",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.cache.duplicate-installs",
      "title": "Duplicate dependency installs",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/avoid-duplicate-dependency-installs",
      "markdown": "/github-actions/optimizations/avoid-duplicate-dependency-installs.md",
      "patternIds": [
        {
          "id": "OPT12",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT14",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT27",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.hygiene.duplicated-setup",
      "title": "Duplicated job setup",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/avoid-duplicated-setup",
      "markdown": "/github-actions/optimizations/avoid-duplicated-setup.md",
      "patternIds": [
        {
          "id": "OPT12",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT16",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT31",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.build.incremental",
      "title": "Incremental build state kept",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/use-incremental-builds",
      "markdown": "/github-actions/optimizations/use-incremental-builds.md",
      "patternIds": [
        {
          "id": "OPT62",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.build.duplicate-compilation",
      "title": "Duplicate compilation",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/avoid-duplicate-compilation",
      "markdown": "/github-actions/optimizations/avoid-duplicate-compilation.md",
      "patternIds": [
        {
          "id": "OPT13",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT15",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.build.docker-builds",
      "title": "Docker build hygiene",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/optimize-docker-builds",
      "markdown": "/github-actions/optimizations/optimize-docker-builds.md",
      "patternIds": [
        {
          "id": "OPT18",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT20",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.hygiene.playwright-artifacts",
      "title": "Playwright artifact capture",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/optimize-playwright",
      "markdown": "/github-actions/optimizations/optimize-playwright.md",
      "patternIds": [
        {
          "id": "OPT56",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.hygiene.vitest-run-mode",
      "title": "Explicit vitest run mode in CI",
      "category": "reliability",
      "family": "optimization",
      "url": "/github-actions/optimizations/optimize-vitest",
      "markdown": "/github-actions/optimizations/optimize-vitest.md",
      "patternIds": [
        {
          "id": "OPT55",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.parallel.independent-jobs",
      "title": "Independent jobs parallelized",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/parallelize-independent-jobs",
      "markdown": "/github-actions/optimizations/parallelize-independent-jobs.md",
      "patternIds": [
        {
          "id": "OPT22",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT23",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.parallel.job-dependencies",
      "title": "Unnecessary needs: edges",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/remove-unnecessary-job-dependencies",
      "markdown": "/github-actions/optimizations/remove-unnecessary-job-dependencies.md",
      "patternIds": [
        {
          "id": "OPT21",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    },
    {
      "id": "ci.parallel.critical-path",
      "title": "Workflow critical path",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/reduce-workflow-critical-path",
      "markdown": "/github-actions/optimizations/reduce-workflow-critical-path.md",
      "patternIds": [
        {
          "id": "OPT72",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT73",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT75",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.parallel.long-running-jobs",
      "title": "Long-running jobs split",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/split-long-running-jobs",
      "markdown": "/github-actions/optimizations/split-long-running-jobs.md",
      "patternIds": [
        {
          "id": "OPT49",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        },
        {
          "id": "OPT50",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.cache.fork-pr-cold-start",
      "title": "Fork PR cold start from a trusted producer",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/speed-up-fork-pr-builds",
      "markdown": "/github-actions/optimizations/speed-up-fork-pr-builds.md",
      "patternIds": [
        {
          "id": "OPT74",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "runtime",
      "retired": false
    },
    {
      "id": "ci.cache.docker-layers",
      "title": "Docker layer caching",
      "category": "performance",
      "family": "optimization",
      "url": "/github-actions/optimizations/use-docker-layer-caching",
      "markdown": "/github-actions/optimizations/use-docker-layer-caching.md",
      "patternIds": [
        {
          "id": "OPT4",
          "url": "https://raw.githubusercontent.com/starslingdev/skills/main/skills/ci-speedup/references/optimization-patterns.md"
        }
      ],
      "detectionMode": "static",
      "retired": false
    }
  ]
}
