security: a real CI check before auto-merge; .github/ always protected; no shell interpolation in labs-aicharts #46

Merged
teahubxyz merged 1 commits from security/ci-context into main 2026-10-14 04:33:35 +00:00
Owner

Follow-up to #45 (audit teahub #109, remaining High + Medium items).

  • Self-certified green. checks() no longer lets the worker's own time/worker-run status earn a merge; it can only block or delay one. With no other check on the PR head, Time now dispatches the project's CI on the PR branch (dispatch_ci, TIME_CI_WORKFLOW default ci.yml, which gains workflow_dispatch) and waits for that; GitHub skips pull_request runs for pushes made with the Actions token, which is why the self-status existed. Beat ci-dispatched, once. TIME_CI_WORKFLOW=off keeps the old "no checks" stop.
  • .github/ is protected from auto-merge whatever TIME_PROTECTED says (closes the update.yml supply-chain path).
  • labs-aicharts.yml passes the deploy URL through env instead of ${{ }} in the script.

Tests: worker-status-only no longer merges and triggers one CI dispatch; a real context merges; the fake GitHub accepts workflow dispatches. python3 .github/time/test_time.py green.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6

Follow-up to #45 (audit teahub #109, remaining High + Medium items). - **Self-certified green.** `checks()` no longer lets the worker's own `time/worker-run` status earn a merge; it can only block or delay one. With no other check on the PR head, Time now dispatches the project's CI on the PR branch (`dispatch_ci`, `TIME_CI_WORKFLOW` default `ci.yml`, which gains `workflow_dispatch`) and waits for that; GitHub skips `pull_request` runs for pushes made with the Actions token, which is why the self-status existed. Beat `ci-dispatched`, once. `TIME_CI_WORKFLOW=off` keeps the old "no checks" stop. - `.github/` is protected from auto-merge whatever `TIME_PROTECTED` says (closes the `update.yml` supply-chain path). - `labs-aicharts.yml` passes the deploy URL through `env` instead of `${{ }}` in the script. Tests: worker-status-only no longer merges and triggers one CI dispatch; a real context merges; the fake GitHub accepts workflow dispatches. `python3 .github/time/test_time.py` green. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
Sign in to join this conversation.