> Historical record: references to the legacy hosted PR check describe the
> original narrower gate. Use `nix flake check` for current validation; recorded
> results below do not establish a pass of today's broader check.

=== Gate 1: Infrastructure generation check ===
$ python3 tools/ci/generate-infrastructure.py --check
Exit code: 0
PASS: Infrastructure files are up to date with model metadata.

=== Gate 2: Infrastructure generation test ===
$ python3 -m unittest tests/tools/generate_infrastructure_test.py
Exit code: 0
Ran 9 tests in 0.030s
OK

=== Gate 3: Extension metadata schema test ===
$ nix develop -c python3 tests/extensions/metadata_test.py --schema
Exit code: 0
test_full_schema (__main__.SchemaTests.test_full_schema) ... ok
Ran 1 test in 0.084s
OK

=== Gate 4: Documentation check ===
$ python3 tools/ci/check-docs.py
Exit code: 0
[check-docs] PASSED: 327 markdown files and 1609 local links/anchors verified with zero broken links or invalid JSON blocks.

=== Gate 5: C++ format check ===
$ nix shell --inputs-from . nixpkgs#clang-tools -c python3 tools/ci/check-format.py --fix
Exit code: 0
PASS: Formatted 848 C++ files

=== Gate 6: Extension isolation unit test ===
$ python3 -m unittest tests/tools/check_extension_isolation_test.py
Exit code: 0
Ran 27 tests in 23.141s
OK

=== Gate 7: Static architectural boundary check ===
$ python3 tools/ci/check-extension-isolation.py --fail-on-extension-boundary --fail-on-serving-boundary --fail-on-model-core-includes
Exit code: 0
[check-extension-isolation] Cross-Layer Include Mappings:
  ─── Strict Boundary Violations (0) ──────────────────────────────────
  ✅ [OK] No active boundary violations.
[check-extension-isolation] PASS: serving boundary (no src/cli include from models, families, cache, src/ext or the public extension API)
[check-extension-isolation] PASS: model core boundary (no production src/models -> src/core|src/cache includes)
[check-extension-isolation] PASS: extension boundary (no src/cli -> migrated extension includes)

=== Gate 8: Continuation identity tests ===
$ nix develop -c ctest --test-dir build/cpu-test -R 'continuation_identity' --output-on-failure
Exit code: 0
Test project /home/mixer/gufo/build/cpu-test
    Start 141: qwen27b_continuation_identity_test
1/3 Test #141: qwen27b_continuation_identity_test .............   Passed    0.00 sec
    Start 155: deepseek_v4_flash_continuation_identity_test
2/3 Test #155: deepseek_v4_flash_continuation_identity_test ...   Passed    0.00 sec
    Start 161: qwen38_flash_next_continuation_identity_test
3/3 Test #161: qwen38_flash_next_continuation_identity_test ...   Passed    0.00 sec

100% tests passed out of 3

=== Gate 9: check-pr target in cpu-test ===
$ nix develop -c cmake --build --preset cpu-test --target check-pr
Exit code: 0
96/96 Test #166: qwen38_flash_next.rope_scaling .................   Passed    0.00 sec
100% tests passed out of 96

=== Gate 10: Hermetic hosted checks ===
$ legacy hosted PR check
Exit code: 0
building '/nix/store/n89sjggj28yi3igwhkkjfxssp4c4vmjx-check-docs.drv'...
building '/nix/store/clmy7aq43k49917bgn2kr3j33hi90fp0-check-format.drv'...
building '/nix/store/sqf84f089n39sg8x8ng2rl8mfap624f9-check-pr-tests.drv'...
building '/nix/store/fgfff8sb4smq8sqlr6mlv38sn0c45l4j-check-pr.drv'...

=== Gate 11: Production build and diagnose ===
$ nix build && ./result/bin/gufo diagnose
Exit code: 0
Extension API: 0.1.6
Extension selection: discovery
Built extensions:
  deepseek_v4_flash 0.1.0 (src/models/deepseek_v4_flash)
  embedding_gemma2 0.1.0 (src/models/embedding_gemma2)
  minimax_h3 0.1.0 (src/models/minimax_h3)
  qwen 0.1.0 (src/models/qwen)
  qwen38_flash_next 0.1.0 (src/models/qwen38_flash_next)
  qwen3_asr 0.1.0 (src/models/qwen3_asr)
  qwen3_tts 0.1.0 (src/models/qwen3_tts)
  qwen_image_21 0.1.0 (src/models/qwen_image_21)
  provider deepseek4: available
  provider embeddinggemma-2: available
  provider minimax-h3: available
  provider qwen27-q4: available
  provider flash-next-q4: available
  provider qwen3-asr: available
  provider qwen3-tts: available
  provider qwen-image-21: available
