- Add VISION_MONTHLY_LIMIT config setting (default 1000)
- Update CloudEngine to use WIF credential config via ADC
- Rewrite HybridEngine to support cloud-primary with Redis counter
- Pass monthly_limit through engine factory
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Create fetch-auth0-token.sh for Auth0 M2M -> GCP WIF token exchange
- Add jq to Dockerfile system dependencies
- Ensure script is executable in container image
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Add AUTH0_OCR_CLIENT_ID and AUTH0_OCR_CLIENT_SECRET to inject-secrets.sh
- Add new secrets to staging and production workflow env blocks
- Create .example files for new secret documentation
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Switch OCR engine config to google_vision primary / paddleocr fallback
- Mount Auth0 OCR secrets and WIF config into all OCR containers
- Add WIF config to repo (not a secret, contains no credentials)
- Remove obsolete google-vision-key.json.example
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The google-wif-config.json was never synced to the deploy path, so the
Docker bind mount created a directory artifact instead of a file. Vision
client initialization failed on every request, silently falling back to
PaddleOCR.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The set -e + curl --fail-with-body inside $() caused the script to exit
with code 22 and empty stderr, hiding the actual Auth0 error. Switch to
writing the body to a temp file and checking HTTP status manually so the
error response is visible in logs.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
VISION_MONTHLY_LIMIT(default 1000) -- hard cutoff to PaddleOCR when limit is reachedFixes #127
Type
Files Changed (19 files, +608/-86)
config.py,cloud_engine.py,hybrid_engine.py,engine_factory.pyocr/scripts/fetch-auth0-token.sh(new)ocr/Dockerfilejq, chmod scriptinject-secrets.sh,staging.yaml,production.yamltest_engine_abstraction.py.gitignore,google-wif-config.json.examplefiles (new), 1 removedTest plan
Commands / steps:
AUTH0_OCR_CLIENT_IDandAUTH0_OCR_CLIENT_SECRETGoogle Vision client initialized via WIF)docker compose exec mvp-redis redis-cli -n 1 GET "ocr:vision_requests:2026-02"Checklist