name: Validate Researcher Operating System on: push: branches: [main] # Stacked pull requests use proposal branches as their base. Validate every # pull request so dependent layers receive the same gates as the base layer. pull_request: {} workflow_dispatch: jobs: validate: runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: "22" cache: npm cache-dependency-path: | researcher/benchmarks/sdk-runner/package-lock.json researcher/schemas/typescript/package-lock.json - name: Install validation dependencies run: pip install -r requirements-dev.txt - name: Compile researcher scripts run: | python -m py_compile \ researcher/scripts/skill_frontmatter.py \ researcher/scripts/governance_policy.py \ researcher/scripts/build_inventory.py \ researcher/scripts/export_policy.py \ researcher/scripts/schema_contract.py \ researcher/scripts/artifact_store.py \ researcher/scripts/migrate_legacy.py \ researcher/scripts/tests/test_skill_frontmatter.py \ researcher/scripts/tests/test_build_inventory.py \ researcher/scripts/tests/test_export_policy.py \ researcher/scripts/tests/test_governance_policy.py \ researcher/scripts/tests/test_schema_contract.py \ researcher/scripts/tests/test_artifact_store.py \ researcher/scripts/validate_governance.py \ researcher/scripts/validate_export.py \ researcher/scripts/validate_schemas.py \ researcher/scripts/validate_platform_compat.py \ researcher/scripts/validate_repo.py \ researcher/scripts/validate_run.py \ researcher/scripts/research_loop.py \ researcher/scripts/novelty_check.py \ researcher/scripts/compare_skill_revisions.py \ researcher/scripts/check_activation_cases.py \ researcher/scripts/run_benchmarks.py \ researcher/scripts/skill_health.py \ researcher/scripts/loop_common.py \ researcher/scripts/loop_discover.py \ researcher/scripts/loop_step.py \ researcher/scripts/loop_daily.py \ researcher/scripts/loop_status.py \ examples/long-horizon-prompt-lab/scripts/build_lab.py \ examples/long-horizon-prompt-lab/scripts/validate_site.py - name: Researcher unit tests run: python -m unittest discover -s researcher/scripts/tests -p 'test_*.py' - name: Governance policy run: python researcher/scripts/validate_governance.py --check - name: Generated repository inventory run: python researcher/scripts/build_inventory.py --check - name: Public export boundary run: >- python researcher/scripts/validate_export.py check --staging-dir researcher/exports/examples/restricted-citation-v1 - name: Python schema and artifact contract run: | python researcher/scripts/validate_schemas.py --check python researcher/scripts/migrate_legacy.py --dry-run - name: TypeScript schema conformance working-directory: researcher/schemas/typescript run: | npm ci --ignore-scripts npm run typecheck npm test - name: Benchmark runner contract working-directory: researcher/benchmarks/sdk-runner run: | npm ci --ignore-scripts npm run typecheck npm run router:dry-run -- --models gpt-5.5 --reps 1 --max-runs 112 --max-budget-usd 2 npm run effectiveness:dry-run -- --models gpt-5.5 --reps 1 --max-runs 12 --max-budget-usd 2 - name: Build and validate long-horizon prompting site run: | python examples/long-horizon-prompt-lab/scripts/build_lab.py python examples/long-horizon-prompt-lab/scripts/validate_site.py git diff --exit-code -- \ examples/long-horizon-prompt-lab/data/prompt-pairs.json \ examples/long-horizon-prompt-lab/ui/data.js \ examples/long-horizon-prompt-lab/ui/prompts/ test -z "$(git status --porcelain --untracked-files=all -- \ examples/long-horizon-prompt-lab/data/prompt-pairs.json \ examples/long-horizon-prompt-lab/ui/data.js \ examples/long-horizon-prompt-lab/ui/prompts/)" - name: Platform compatibility (Agent Skills reference) run: python researcher/scripts/validate_platform_compat.py --require-reference-validator - name: Validate repository (strict) run: python researcher/scripts/validate_repo.py --strict - name: Skill health (strict) run: python researcher/scripts/skill_health.py --strict --no-history - name: Activation regression tests run: python researcher/scripts/check_activation_cases.py - name: Adversarial benchmark harness run: python researcher/scripts/run_benchmarks.py