# Scripts ## `check_coverage.py` Enforce project and incremental coverage targets for backend Python code and the inline JavaScript and CSS in `claude_tap/viewer.html`. Targets are configured in `pyproject.toml` under `[tool.claude_tap.coverage]`: - Python project coverage: `python_total_min` - Python changed executable package lines: `python_diff_min` - Viewer JavaScript function coverage: `viewer_js_function_min` - Viewer changed JavaScript functions: `viewer_js_diff_min` - Viewer CSS selector coverage: `viewer_css_selector_min` - Viewer changed CSS selectors: `viewer_css_diff_min` ### Usage ```bash python -m coverage run -m pytest tests/ -q python -m coverage json -o .coverage.json python scripts/check_coverage.py --python-coverage .coverage.json ``` ## `check_pr_policy.py` Validate PR body policy against the changed files in a pull request. The check enforces machine-readable maintainer rules: - Summary/Problem/Goal and Validation/Test plan/Results sections are present - Runtime, viewer, client, proxy, or UI behavior changes include `raw.githubusercontent.com` screenshot evidence - PR image links use `raw.githubusercontent.com` - Raw traces, generated trace viewers, logs, and secret-like files are not part of the PR - PR body does not include obvious API keys or bearer tokens ### Usage ```bash python scripts/check_pr_policy.py \ --body-file /tmp/pr-body.md \ --changed-files-file /tmp/pr-files.txt ``` In GitHub Actions, pass the event payload: ```bash python scripts/check_pr_policy.py \ --event-path "$GITHUB_EVENT_PATH" \ --changed-files-file /tmp/pr-files.txt ``` The CI workflow runs this check both as a standalone `pr-policy` job and inside the existing required `lint` job. ## `translate_i18n.py` Translate missing i18n strings in `claude_tap/viewer_i18n.json` using OpenRouter. It parses the viewer i18n JSON source, finds keys present in both `en` and `zh-CN` but missing in other supported languages (`ja`, `ko`, `fr`, `ar`, `de`, `ru`), and writes new translations back into the same file. ### Requirements - Set `OPENROUTER_API_KEY` in your environment - Default model: `google/gemini-2.5-flash` ### Usage ```bash # Show missing keys only (no file changes) python scripts/translate_i18n.py --dry-run # Translate missing keys and update viewer_i18n.json in place python scripts/translate_i18n.py # Use a specific model python scripts/translate_i18n.py --model google/gemini-2.5-flash ``` ### Advanced usage ```bash # Use a custom file/object name (future CLI i18n support) python scripts/translate_i18n.py --target cli --dry-run python scripts/translate_i18n.py --file claude_tap/cli.py --object-name I18N --dry-run ``` ## `check_changelog.py` Ensure release tags are documented in `CHANGELOG.md`. Publish checks the exact tag being published. ### Usage ```bash # Check latest release tag known to git python scripts/check_changelog.py # Check an explicit release tag python scripts/check_changelog.py --tag v0.1.40 ``` ## `update_changelog.py` Insert a release section in `CHANGELOG.md` when one is missing. Auto-release uses this before tagging so normal feature/fix PRs are not blocked by changelog bookkeeping. If the main branch is protected, auto-release opens or updates a changelog PR with the standard PR body, waits for the PR checks, merges it with the release bot's admin bypass, and publishes after that PR is merged. ### Usage ```bash python scripts/update_changelog.py --version 0.1.40 python scripts/update_changelog.py --version 0.1.40 --date 2026-05-03 ```