{
  "repository": "freeCodeCamp/freeCodeCamp",
  "ref": "21f0b632bc49621669f897c6ee795a07e90426f4",
  "methods": [
    {
      "slug": "formal",
      "title": "Formal verification and model checking"
    },
    {
      "slug": "static_analysis",
      "title": "Static analysis"
    },
    {
      "slug": "testing",
      "title": "Testing"
    },
    {
      "slug": "formatting",
      "title": "Formatting and hygiene"
    },
    {
      "slug": "supply_chain",
      "title": "Supply chain"
    },
    {
      "slug": "unclassified",
      "title": "Unclassified"
    }
  ],
  "verifications": [
    {
      "tool": "eslint",
      "method": "static_analysis",
      "commands": [
        "eslint --max-warnings 0"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "api/package.json",
          "locator": "scripts.lint"
        },
        {
          "path": "client/package.json",
          "locator": "scripts.lint"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.lint"
        },
        {
          "path": "e2e/package.json",
          "locator": "scripts.lint"
        },
        {
          "path": "api/package.json",
          "locator": "devDependencies: eslint"
        },
        {
          "path": "client/package.json",
          "locator": "devDependencies: eslint"
        },
        {
          "path": "curriculum/package.json",
          "locator": "devDependencies: eslint"
        },
        {
          "path": "e2e/package.json",
          "locator": "devDependencies: eslint"
        },
        {
          "path": "package.json",
          "locator": "dependencies: eslint"
        },
        {
          "path": "api/eslint.config.js",
          "locator": "config file"
        },
        {
          "path": "client/eslint.config.mjs",
          "locator": "config file"
        },
        {
          "path": "curriculum/eslint.config.mjs",
          "locator": "config file"
        }
      ],
      "upstream": "https://github.com/eslint/eslint",
      "docs": "https://eslint.org/docs/latest/use/command-line-interface#exit-codes",
      "exit_codes": {
        "0": "no errors",
        "1": "linting errors found",
        "2": "configuration problem or internal error"
      },
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": "tsc",
      "method": "static_analysis",
      "commands": [
        "tsc -p tsconfig.build.json",
        "tsc --noEmit",
        "tsc"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "api/package.json",
          "locator": "scripts.build"
        },
        {
          "path": "api/package.json",
          "locator": "scripts.type-check"
        },
        {
          "path": "client/package.json",
          "locator": "scripts.type-check"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.type-check"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.setup"
        },
        {
          "path": "e2e/package.json",
          "locator": "scripts.type-check"
        },
        {
          "path": "api/package.json",
          "locator": "devDependencies: typescript"
        },
        {
          "path": "client/package.json",
          "locator": "dependencies: typescript"
        },
        {
          "path": "e2e/package.json",
          "locator": "devDependencies: typescript"
        },
        {
          "path": "package.json",
          "locator": "devDependencies: typescript"
        }
      ],
      "upstream": "https://github.com/microsoft/TypeScript",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "playwright",
      "method": "testing",
      "commands": [
        "playwright test --ui-port=0",
        "playwright test"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "e2e/package.json",
          "locator": "scripts.playwright:watch"
        },
        {
          "path": "e2e/package.json",
          "locator": "scripts.playwright:run"
        },
        {
          "path": "package.json",
          "locator": "devDependencies: @playwright/test"
        },
        {
          "path": "e2e/playwright.config.ts",
          "locator": "config file"
        }
      ],
      "upstream": "https://github.com/microsoft/playwright",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "vitest",
      "method": "testing",
      "commands": [
        "vitest run",
        "vitest",
        "vitest --ui"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "api/package.json",
          "locator": "scripts.test"
        },
        {
          "path": "api/package.json",
          "locator": "scripts.test:watch"
        },
        {
          "path": "api/package.json",
          "locator": "scripts.test:ui"
        },
        {
          "path": "client/package.json",
          "locator": "scripts.test"
        },
        {
          "path": "client/package.json",
          "locator": "scripts.test:watch"
        },
        {
          "path": "client/package.json",
          "locator": "scripts.test:ui"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test:watch"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test-tooling"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test-content"
        },
        {
          "path": "api/package.json",
          "locator": "devDependencies: vitest"
        },
        {
          "path": "client/package.json",
          "locator": "devDependencies: vitest"
        }
      ],
      "upstream": "https://github.com/vitest-dev/vitest",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "mocha",
      "method": "testing",
      "commands": [],
      "triggers": [],
      "evidence": [
        {
          "path": "curriculum/package.json",
          "locator": "devDependencies: mocha"
        }
      ],
      "upstream": "https://github.com/mochajs/mocha",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": true
    },
    {
      "tool": "prettier",
      "method": "formatting",
      "commands": [
        "prettier --write client/i18n/locales/**/*.json",
        "prettier --write .",
        "prettier --list-different ."
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/crowdin-download.client-ui.yml",
          "locator": "jobs.i18n-download-client-ui-translations.steps[12] (Format JSON)"
        },
        {
          "path": "package.json",
          "locator": "scripts.format:prettier"
        },
        {
          "path": "package.json",
          "locator": "scripts.lint:prettier"
        },
        {
          "path": "package.json",
          "locator": "devDependencies: prettier"
        },
        {
          "path": ".prettierrc",
          "locator": "config file"
        }
      ],
      "upstream": "https://github.com/prettier/prettier",
      "docs": "https://prettier.io/docs/cli#exit-codes",
      "exit_codes": {
        "0": "everything formatted",
        "1": "something was not formatted (--check)",
        "2": "prettier error"
      },
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "StrictHostKeyChecking no\" > ~/.ssh/config"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/deploy-api.yml",
          "locator": "jobs.deploy.steps[2] (Configure SSH & Check Connection)"
        },
        {
          "path": ".github/workflows/deploy-client.yml",
          "locator": "jobs.client.steps[10] (Configure SSH & Check Connection)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "gatsby develop --inspect=9230"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "client/package.json",
          "locator": "scripts.develop"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pm2 delete client-secondary"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/deploy-client.yml",
          "locator": "jobs.client.steps[11] (Upload and Deploy)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pm2 start ./client-start-secondary.sh --name client-secondary"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/deploy-client.yml",
          "locator": "jobs.client.steps[11] (Upload and Deploy)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "run-s format:eslint format:prettier"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "package.json",
          "locator": "scripts.format"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "stylelint **/*.css"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "package.json",
          "locator": "scripts.lint:css"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "trap rm -f .env age.key secrets.age.asc .env.tmp EXIT"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/deploy-api.yml",
          "locator": "jobs.deploy.steps[3] (Deploy with Docker Stack)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "tsx ./src/challenge-auditor/index.ts"
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/i18n-validate-builds.yml",
          "locator": "jobs.ci.steps[6] (Validate Challenge Files)"
        },
        {
          "path": "package.json",
          "locator": "scripts.audit-challenges"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.audit-challenges"
        },
        {
          "path": ".github/workflows/i18n-validate-prs.yml",
          "locator": "jobs.ci.steps[5] (Validate Challenge Files)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "tsx ./src/test/utils/generate-block-tests.ts"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test-gen"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test:watch"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test-tooling"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.test-content"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "tsx src/fix-seed-semicolons.ts --check"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "curriculum/package.json",
          "locator": "scripts.check-seed-semicolons"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "tsx src/lint-localized"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "curriculum/package.json",
          "locator": "scripts.lint"
        },
        {
          "path": "curriculum/package.json",
          "locator": "scripts.lint-challenges"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "tsx tools/exam-environment/test/index.ts"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "api/package.json",
          "locator": "scripts.exam-env:test"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo -F=@freecodecamp/api test"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "package.json",
          "locator": "scripts.test-api"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo -F=@freecodecamp/client test"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "package.json",
          "locator": "scripts.test-client"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo -F=@freecodecamp/curriculum test-content"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "package.json",
          "locator": "scripts.test-curriculum-content"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo lint"
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.lint.steps[9] (Lint Source Files)"
        },
        {
          "path": "package.json",
          "locator": "scripts.lint"
        },
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.lint.steps[11] (Lint Upcoming Changes)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo lint -- --fix"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "package.json",
          "locator": "scripts.format:eslint"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo lint-root"
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.lint.steps[9] (Lint Source Files)"
        },
        {
          "path": "package.json",
          "locator": "scripts.lint"
        },
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.lint.steps[11] (Lint Upcoming Changes)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo test"
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.test.steps[9] (Run Tests)"
        },
        {
          "path": "package.json",
          "locator": "scripts.test"
        },
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.test-upcoming.steps[9] (Run Tests)"
        },
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.test-localization.steps[10] (Run Tests)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "turbo type-check"
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.lint.steps[9] (Lint Source Files)"
        },
        {
          "path": "package.json",
          "locator": "scripts.lint"
        },
        {
          "path": ".github/workflows/node.js-tests.yml",
          "locator": "jobs.lint.steps[11] (Lint Upcoming Changes)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "while [ $SECONDS -lt $deadline ]"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/devcontainer-ci.yml",
          "locator": "jobs.validate.steps[9] (Validate the client answers on IPv4 loopback)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    }
  ]
}
