github-delivery-watchdog ยท diff
git:20260916.8058f12 to git:20261027.f79208b
58 added, 24 removed. Audit A to A.
---
name: github-delivery-watchdog
description: Periodically check pull requests and merge only current heads with independent review, tests, and passing CI.
triggers:
- /github-delivery-watchdog
---
- # GitHub delivery watchdog
+ # Github Delivery Watchdog
- This is a deterministic scheduled host command. It creates no agent or
- conversation and needs no agent profile. Configure a repository-scoped
- fine-grained PAT with Contents and Issues read/write plus Pull requests, Actions,
- Commit statuses, and Metadata read. Contents write permits merge; Issues write
- retains the review label when the branch is updated. Never put the token value in
- the automation definition.
+ This automation now runs from the executable automation plugin at `plugins/github-delivery-watchdog`. Do not copy or package code from `skills/github-delivery-watchdog`; the skill is only a setup guide for creating the plugin-spec automation.
- Package `scripts/worker.py` as `worker.py` and the shared
- `scripts/github_client.py` as `github_client.py`.
- The catalog bundle declares these exact files. Its `config.json` supplies
- `repos`, `branch_prefix`, and the saved secret name. The shared GitHub client
- resolves only that named secret. Automation owns scheduling and cancellation.
+ ## Create with the plugin-spec endpoint
- Set `branch_prefix` (default `openhands/issue`), `base_branch` (defaults to the repository's default branch),
- and `required_workflow_ids` when particular Actions workflows must run. The
- watchdog requires `software-factory/tests` and `software-factory/review` success
- statuses on the exact head, all other statuses and Actions passing, a current
- base, a non-draft PR, and GitHub reporting it mergeable. Missing, pending, failed,
- or inaccessible evidence does not permit merge. A changed head requires fresh
- review and tests. When an accepted branch is behind the base, the watchdog asks
- GitHub to update it and retains the review trigger label; it considers the new
- head only on a later run. The merge request includes the expected head SHA.
+ Use `POST /api/automation/v1/plugin-spec` with this plugin source:
- Actions are optional when `required_workflow_ids` is empty; the two acceptance
- statuses remain mandatory. Configure workflow IDs when GitHub Actions must also
- supply evidence. Branch protection remains GitHub's final merge gate.
+ ```json
+ {
+ "source": "github:OpenHands/extensions",
+ "repo_path": "plugins/github-delivery-watchdog",
+ "ref": "main"
+ }
+ ```
+
+ `ref` is `main` while this plugin layout is unreleased. After an `openhands-extensions` release includes this plugin, prefer the matching release tag, for example `v<extensions-version>`. If setup code can inspect the installed package version, parameterize this value as `v{version('openhands-extensions')}`; otherwise default to `main`.
+
+ For local Agent Canvas development from this checkout, use a local source instead:
+
+ ```json
+ {
+ "source": "/absolute/path/to/OpenHands/extensions",
+ "repo_path": "plugins/github-delivery-watchdog"
+ }
+ ```
+
+ ## Request template
+
+ ```json
+ {
+ "name": "Periodically check pull requests and merge only current heads with independent review, tests, and passing CI",
+ "plugin": {
+ "source": "github:OpenHands/extensions",
+ "repo_path": "plugins/github-delivery-watchdog",
+ "ref": "main"
+ },
+ "config": {
+ "repos": [
+ "OpenHands/extensions"
+ ],
+ "github_token_secret": "GITHUB_PERSONAL_ACCESS_TOKEN",
+ "branch_prefix": "openhands/issue"
+ },
+ "trigger": {
+ "type": "cron",
+ "schedule": "*/5 * * * *",
+ "timezone": "UTC"
+ },
+ "enabled": false
+ }
+ ```
+
+ The authoritative config schema is in `plugins/github-delivery-watchdog/.plugin/plugin.json` under `automation.config_schema`. Use that schema to validate any user-provided values before creating the automation.
+
+ ## Runtime notes
+
+ - Entrypoint: `python3 plugin_runner.py worker.py` in `scripts`.
+ - Agent profile: `none`.
+ - Secondary plugins: `[]`.
+
+ The old skill-local script packaging flow is deprecated. Use the plugin spec directly so OpenHands/automation resolves the plugin, writes `config.json`, and derives the runtime entrypoint from the plugin manifest.