diff --git a/.github/workflows/focused-coverage-controller.lock.yml b/.github/workflows/focused-coverage-controller.lock.yml index adb61fff7..697663fbd 100644 --- a/.github/workflows/focused-coverage-controller.lock.yml +++ b/.github/workflows/focused-coverage-controller.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"19ad0878ad287bd8f51c3f4bb435e8d2da55a83b2d1e22bab242fa65f5996a3a","body_hash":"84a43ee4b5e8da80154896c50245219e61cff7717ca2e892d58525209919170c","compiler_version":"v0.82.14","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"34a7466d6c5cdcc62b5f750959ba94c29bd1616262c5a8eddbae9d01011d6e83","body_hash":"ec2fe4696e0b5ab2de7af05b4be543975c9467cd44292aef1de4a5dfc1f8c96a","compiler_version":"v0.82.14","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b6d1443e05b8716267fa19425b99aa4f12006b4a","version":"v0.82.14"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.37","digest":"sha256:0d35e8682845f183c1c634699a8e8a6cbe2c271b867031410df74533243c5f67","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.37@sha256:0d35e8682845f183c1c634699a8e8a6cbe2c271b867031410df74533243c5f67"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.37","digest":"sha256:fc2970aadaeae05993e76697d29f03dc8bfb9248ff87a8f3d8b0975485a4b317","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.37@sha256:fc2970aadaeae05993e76697d29f03dc8bfb9248ff87a8f3d8b0975485a4b317"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.37","digest":"sha256:5abc51995e5901c5d1daeefc957301ee409980e2e607391ec22c06cb2513327b","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.37@sha256:5abc51995e5901c5d1daeefc957301ee409980e2e607391ec22c06cb2513327b"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # This file was automatically generated by gh-aw (v0.82.14). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # @@ -53,8 +53,6 @@ name: "Focused Coverage Controller (authoritative-gate only)" on: - schedule: - - cron: "11 2 * * *" # Friendly format: daily (scattered) workflow_dispatch: inputs: aw_context: @@ -387,9 +385,6 @@ jobs: contents: read issues: read pull-requests: read - concurrency: - group: "gh-aw-codex-${{ github.workflow }}" - queue: max env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} GH_AW_ASSETS_ALLOWED_EXTS: "" diff --git a/.github/workflows/focused-coverage-controller.md b/.github/workflows/focused-coverage-controller.md index 93585eb0d..838346348 100644 --- a/.github/workflows/focused-coverage-controller.md +++ b/.github/workflows/focused-coverage-controller.md @@ -1,6 +1,5 @@ --- on: - schedule: daily workflow_dispatch: permissions: @@ -24,7 +23,12 @@ safe-outputs: # Focused Coverage Controller (authoritative-gate only) -You are Jules running EventRelay's focused coverage controller. +You are EventRelay's focused coverage controller. Use the configured Codex +engine for this canary; Jules remains enabled as an implementation agent and +must not be disabled or impersonated by this workflow. + +This workflow is manual-only until the authoritative Coverage job produces an +exact-head artifact and the canary exit criteria in issue #920 are complete. ## Entry criteria diff --git a/tests/test_skills_integration.py b/tests/test_skills_integration.py index 646c22934..560ecd88e 100644 --- a/tests/test_skills_integration.py +++ b/tests/test_skills_integration.py @@ -34,22 +34,6 @@ _agents_pkg.__package__ = "agents" sys.modules["agents"] = _agents_pkg -# Stub youtube_extension.processors to avoid pulling in heavy ML deps -for _mod_name in [ - "youtube_extension", - "youtube_extension.processors", - "youtube_extension.processors.enhanced_extractor", -]: - if _mod_name not in sys.modules: - _stub = types.ModuleType(_mod_name) - _stub.__path__ = [] # type: ignore[attr-defined] - _stub.__package__ = _mod_name - # Provide stub classes so the coordinator imports fine - if _mod_name == "youtube_extension.processors.enhanced_extractor": - _stub.EnhancedVideoExtractor = type("EnhancedVideoExtractor", (), {}) # type: ignore[attr-defined] - _stub.VideoContent = type("VideoContent", (), {}) # type: ignore[attr-defined] - sys.modules[_mod_name] = _stub - # Now we can safely import just the coordinator module from agents.mcp_ecosystem_coordinator import SkillRegistry # noqa: E402 @@ -122,6 +106,13 @@ def test_get_nonexistent_skill_returns_none(self, registry: SkillRegistry) -> No # --------------------------------------------------------------------------- +def test_skill_import_does_not_replace_processor_package() -> None: + """The integration test must not poison later test-module collection.""" + from youtube_extension.processors import strategies + + assert strategies.__file__ is not None + + class TestSkillTriggerMatching: """Verify trigger-based skill discovery."""