Workflows batch: heartbeat knobs, housekeeping.yml, its test in CI #127

Merged
teahubxyz merged 2 commits from ceo/heartbeat-env-knobs into main 2026-10-18 16:10:59 +00:00
3 changed files with 32 additions and 1 deletions

No files matched your search

+1
View File
@@ -19,3 +19,4 @@ jobs:
node-version: 22
- run: python3 .github/time/test_time.py
- run: python3 .github/time/test_seed.py
- run: python3 .github/time/test_housekeeping.py
+5 -1
View File
@@ -48,8 +48,12 @@ jobs:
TIME_DAILY_CAP: ${{ vars.TIME_DAILY_CAP }}
TIME_DAILY_USD: ${{ vars.TIME_DAILY_USD }} # spend governor: dollars per day (default 5) …
TIME_MONTHLY_USD: ${{ vars.TIME_MONTHLY_USD }} # … and per month (default 100); ledger in time/ledger/
TIME_CAP_SLACK: ${{ vars.TIME_CAP_SLACK }} # a run launched within budget may finish up to this x the daily cap (default 1.5; #117)
TIME_ANTHROPIC_API: ${{ vars.TIME_ANTHROPIC_API }} # messages (default, prompt caching) | compat = the OpenAI-compatible endpoint (#119)
TIME_CURSOR_MODEL: ${{ vars.TIME_CURSOR_MODEL }}
TIME_REVIEW: ${{ vars.TIME_REVIEW }}
TIME_REVIEW: ${{ vars.TIME_REVIEW }} # one seat, or a comma-separated council (#77)
TIME_REVIEW_TIEBREAK: ${{ vars.TIME_REVIEW_TIEBREAK }} # the seat called only on a split, e.g. venice:kimi (#77)
TIME_REVIEW_QUORUM: ${{ vars.TIME_REVIEW_QUORUM }} # approves minus objects needed to land (default 1; #77)
TIME_STUCK_HOURS: ${{ vars.TIME_STUCK_HOURS }}
TIME_AUTOMERGE: ${{ vars.TIME_AUTOMERGE }}
TIME_REQUIRE_CHECKS: ${{ vars.TIME_REQUIRE_CHECKS }}
+26
View File
@@ -0,0 +1,26 @@
name: housekeeping
# The daily sweep (#83, .github/time/housekeeping.py): prunes merged branches, closes spent signal issues and empty
# milestones, lists the stale on the Astra log. Deterministic, no model calls; dry-run unless TIME_MODE=live.
# SOP: .agents/skills/housekeeping/SKILL.md
on:
schedule:
- cron: "17 13 * * *" # a few minutes after the Astra tick (13:13)
workflow_dispatch:
concurrency:
group: housekeeping
cancel-in-progress: false
jobs:
sweep:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
with:
sparse-checkout: .github/time
persist-credentials: false
- run: python3 .github/time/housekeeping.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TIME_TOKEN: ${{ secrets.TIME_TOKEN }} # branch and issue writes go out as the `time` user
TIME_MODE: ${{ vars.TIME_MODE }}
TIME_VENTURE_MEASURE_DAYS: ${{ vars.TIME_VENTURE_MEASURE_DAYS }}