Skip to content

Commit 7063cd5

Browse files
author
jgstern-agent
committed
refactor(ci): switch full-suite cron to twice daily at 01:00/13:00 UTC
Replaces the every-4-hours schedule (00, 04, 08, 12, 16, 20 UTC) with two daily runs at 01:00 and 13:00 UTC. Singleton concurrency is unchanged, so only one full-suite run is in flight at a time. Updates the four governance references that called out the old "every 4 hours" cadence (AGENTS.md, the ci-debug + smart-test playbooks, and the transcript-change hook summary) to match. Signed-off-by: jgstern-agent <josh-agent@iterabloom.com>
1 parent afcaca6 commit 7063cd5

6 files changed

Lines changed: 12 additions & 10 deletions

File tree

.agent/agent_playbooks_protocols_sops_skills/ci-debug-protocol.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
12
## CI Debugging Protocol
23
When CI fails but tests pass locally, use `./scripts/ci-debug`:
34

@@ -14,7 +15,7 @@ When CI fails but tests pass locally, use `./scripts/ci-debug`:
1415

1516
**CI workflow topology:**
1617
- **`ci.yml`**: Fast per-PR check (smart-test on changed packages). Gates merge.
17-
- **`full-suite.yml`**: Periodic validation (every 4 hours + manual dispatch). Runs all packages in parallel. Does NOT trigger on push to dev — with 20+ merges/day and singleton concurrency, the queue never clears. Stop-the-line fires from scheduled runs, so there may be a delay between a breaking merge and the andon cord — this is expected, not a bug.
18+
- **`full-suite.yml`**: Periodic validation (twice daily at 01:00 and 13:00 UTC + manual dispatch). Runs all packages in parallel. Does NOT trigger on push to dev — with 20+ merges/day and singleton concurrency, the queue never clears. Stop-the-line fires from scheduled runs, so there may be a delay between a breaking merge and the andon cord — this is expected, not a bug.
1819
- **`nightly.yml`**: Runs at 11 PM UTC. Multi-Python matrix (3.10–3.13) and integration tests. Sets commit statuses (`nightly/test-matrix`, `nightly/integration-tests`) so release.yml can skip them when the release SHA was already covered. `ci-debug status` works for nightly runs too.
1920
- **`release.yml`**: Triggered by version tag push or manual dispatch. Security audit is a hard gate before publish. Test-matrix and integration-tests are deferred: if nightly already covered the SHA they're skipped, otherwise they run post-publish as verification.
2021

.agent/agent_playbooks_protocols_sops_skills/smart-test-playbook.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ TOTAL 33003 10 99%
3434
FAIL Required test coverage of 100% not reached. Total coverage: 99.97%
3535
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3636
Full output: .ci/pytest-output.log
37-
Targeted run (14 test files, 3 changed sources). Full suite runs in CI every 4 hours (not post-merge); running it now would be wasteful.
37+
Targeted run (14 test files, 3 changed sources). Full suite runs in CI twice daily at 01:00 and 13:00 UTC (not post-merge); running it now would be wasteful.
3838
```
3939

4040
The Missing column shows exact line numbers to fix. **Do NOT re-run tests** just to find missing lines. The "Targeted run" message means smart-test already validated 100% coverage for your changed files — do NOT follow up with `pytest --full`.

.agent/hooks/_shared/on_transcript_change.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def _extract_transcript_metadata(transcript_path: str) -> dict[str, str]:
268268
("ci-debug-protocol",
269269
".agent/agent_playbooks_protocols_sops_skills/ci-debug-protocol.md",
270270
"When CI fails but tests pass locally, use ci-debug runs/status/analyze-deps. Four CI "
271-
"workflows: ci.yml (per-PR smart-test), full-suite (every 4 hours, all packages), "
271+
"workflows: ci.yml (per-PR smart-test), full-suite (twice daily at 01:00 and 13:00 UTC, all packages), "
272272
"nightly (multi-Python matrix + integration tests), release (on tag push). Common root "
273273
"causes: missing pyproject.toml dependencies, version mismatches, platform differences. "
274274
"Never use pytest.skip() to hide failures."),

.ci/affected-tests.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
# Test selection manifest
2-
# Generated by smart-test at 2026-04-26T19:11:02-04:00
2+
# Generated by smart-test at 2026-04-26T19:52:54-04:00
33
# Mode: targeted
4-
# Baseline: da884304c90ca449941831de752e6890206d70a1
5-
# Reason: no Python source files changed
4+
# Baseline: afcaca6256e7ffc90467fa5544fbd02490edeb47
65
# Changed files: 5
76
# Changed source files: 0
8-
# Selected tests: 0
7+
0
8+
# Selected tests: 1
99
#
1010
# === CHANGED_SOURCE_FILES ===
1111
# === SELECTED_TESTS ===
12+
tests/test_on_transcript_change.py

.github/workflows/full-suite.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ name: Full Test Suite
88
on:
99
# Manual trigger for debugging
1010
workflow_dispatch:
11-
# Periodic validation (every 4 hours)
11+
# Periodic validation (twice daily at 01:00 and 13:00 UTC)
1212
# Post-merge push trigger removed: with 20+ merges/day and singleton
1313
# concurrency, the queue never clears. Periodic runs catch regressions
1414
# within hours while saving CI resources.
1515
schedule:
16-
- cron: '0 */4 * * *' # Every 4 hours
16+
- cron: '0 1,13 * * *' # 01:00 and 13:00 UTC
1717

1818
# Singleton concurrency - only one full suite runs at a time
1919
# This prevents resource contention and ensures clear pass/fail state

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ External contributors: see `docs/CONTRIBUTOR_MODE.AGENTS.md` for fork-based work
247247
Agent runs `prepare-release VERSION` (bumps version, updates changelog, runs release-check, creates dev-to-main PR). Human merges the PR and runs `tag-release VERSION` to create a GPG-signed tag, triggering the release CI workflow. Separation ensures branch protection and human authorization. (For more explanation, please read `.agent/agent_playbooks_protocols_sops_skills/release-workflow.md`.)
248248

249249
## CI Debugging Protocol
250-
When CI fails but tests pass locally, use `ci-debug runs/status/analyze-deps`. Four CI workflows: ci.yml (per-PR smart-test), full-suite (every 4 hours), nightly (multi-Python matrix + integration), release (on tag). Common root causes: missing pyproject.toml deps, version mismatches, platform differences. Never poll CI manually. (For more explanation, please read `.agent/agent_playbooks_protocols_sops_skills/ci-debug-protocol.md`.)
250+
When CI fails but tests pass locally, use `ci-debug runs/status/analyze-deps`. Four CI workflows: ci.yml (per-PR smart-test), full-suite (twice daily at 01:00 and 13:00 UTC), nightly (multi-Python matrix + integration), release (on tag). Common root causes: missing pyproject.toml deps, version mismatches, platform differences. Never poll CI manually. (For more explanation, please read `.agent/agent_playbooks_protocols_sops_skills/ci-debug-protocol.md`.)
251251

252252
## Testing Optional Dependencies
253253
For PyPI-available tree-sitter grammars: add to pyproject.toml, write real tests, no mocking. For build-from-source grammars (built via `scripts/build-source-grammars`): write real tests calling the analyzer directly, plus a mock test only for the unavailability code path. Never use `pytest.mark.skipif` as an escape hatch. (For more explanation, please read `.agent/agent_playbooks_protocols_sops_skills/optional-dependency-testing-playbook.md`.)

0 commit comments

Comments
 (0)