diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..c91c812c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,46 @@ +name: CI + +on: + pull_request: + branches: + - main + push: + branches: + - main + +permissions: + contents: read + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate: + name: Validate Python + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: pip + cache-dependency-path: | + requirements.txt + requirements-dev.txt + + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y ffmpeg + + - name: Install dependencies + run: make install-dev + + - name: Run lint smoke checks + run: make lint + + - name: Run test suite + run: make test diff --git a/requirements.txt b/requirements.txt index 86007941..b0ac36ad 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,5 +4,6 @@ pydantic>=2.0 jsonschema>=4.20 python-dotenv>=1.0 Pillow>=10.0 +numpy>=1.24 requests>=2.31 google-auth>=2.0 # service-account auth for Google TTS + Imagen (Vertex AI) diff --git a/skills/pipelines/character-animation/proposal-director.md b/skills/pipelines/character-animation/proposal-director.md index cec0c4cf..b250c221 100644 --- a/skills/pipelines/character-animation/proposal-director.md +++ b/skills/pipelines/character-animation/proposal-director.md @@ -33,6 +33,9 @@ When both Remotion and HyperFrames are available: - FFmpeg: post-processing only. Do not pick FFmpeg as the primary runtime for character acting. +Present both Remotion and HyperFrames to the user before recommending one. +Record the alternatives considered in the decision log as +`render_runtime_selection`, including why `hyperframes` was accepted or rejected. Wait for user approval before locking `render_runtime`. ## Sample-First Rule diff --git a/tests/contracts/test_phase3_contracts.py b/tests/contracts/test_phase3_contracts.py index f420a93e..17b93adb 100644 --- a/tests/contracts/test_phase3_contracts.py +++ b/tests/contracts/test_phase3_contracts.py @@ -143,7 +143,7 @@ class TestCapabilityMetadata: catalog = reg.capability_catalog() assert "tts" in catalog providers = {item["provider"] for item in catalog["tts"] if item["provider"] != "selector"} - assert providers == {"elevenlabs", "google_tts", "openai", "piper"} + assert providers == {"doubao", "elevenlabs", "google_tts", "openai", "piper"} # ---- Animated Explainer Pipeline ----