Skip to content

feat(ci): A5-convergence — -parallel=2 cap + non-gating nightly -race + ops-monitor surfacing for BOTH nightlies (hk-plw4z) - #21

Open
gregberns wants to merge 4 commits into
mainfrom
hk-plw4z-a5-convergence
Open

feat(ci): A5-convergence — -parallel=2 cap + non-gating nightly -race + ops-monitor surfacing for BOTH nightlies (hk-plw4z)#21
gregberns wants to merge 4 commits into
mainfrom
hk-plw4z-a5-convergence

Conversation

@gregberns

Copy link
Copy Markdown
Owner

A5-convergence (hk-plw4z)

Salvages the reviewed commit 18f212de (3 of 4 parts, APPROVE from agent-reviewer) via a normal git/PR path — the daemon dispatch path is blocked by a phantom-run bug — and adds the previously-missing Part 4.

Parts

  1. Makefile check-short -parallel=2 cap — caps intra-package t.Parallel concurrency at 2 (= GOMAXPROCS on 2-vCPU runners), killing the 2× oversubscription deadline-miss flakes. -race stays ON. (from 18f212d)
  2. check-race-full Makefile target + .github/workflows/nightly-race.yml — full-parallel go test -race -count=1 ./..., no -short, no -parallel cap, 03:00 UTC nightly. Non-gating; NO continue-on-error, so gh run conclusion is accurate. (from 18f212d)
  3. scripts/ops-monitor-check.sh nightly-race probe — surfaces the nightly-race workflow result as checks['nightly-race'] + nightly-race-fail digest signal. (from 18f212d)
  4. NEW — scenario.yml nightly surfacing (this PR's addition):
    • Fixes the lying cron comment in scenario.yml that claimed failures surface — they never did (the job sets continue-on-error, so the run conclusion is always green). Comment now states the truth and points at the ops-monitor probe.
    • Extends the ops-monitor probe to cover BOTH nightlies. For scenario.yml it reads the STEP conclusion (make test-scenario) of the latest scheduled run via gh run view --json jobs — NOT the run/workflow conclusion, which continue-on-error masks. A red step surfaces as checks['scenario-nightly'] + scenario-nightly-fail. Follows the dquote-safe pattern (hk-2mw1x): embedded python uses only single-quoted literals.

Notes

  • Config-only. Zero product-logic changes. Touches only Makefile, .github/workflows/nightly-race.yml, .github/workflows/scenario.yml, scripts/ops-monitor-check.sh.
  • References hk-plw4z.
  • A5-clear gate: 2× consecutive STEP-green CI runs.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TepxLRzEDYuXypuN77i9cT

@gregberns
gregberns force-pushed the hk-plw4z-a5-convergence branch from f7b23ac to 60bbd98 Compare July 8, 2026 18:44
gregberns and others added 4 commits July 8, 2026 12:31
…lying cron comment (hk-plw4z)

Completes the 3-part change salvaged from 18f212d by adding the previously
missing Part 4: ops-monitor surfacing for the SECOND nightly (scenario.yml).

(a) scenario.yml: rewrite the cron comment that falsely claimed "Nightly at
    04:00 UTC so failures surface before the next workday." The job sets
    continue-on-error, so the run/workflow conclusion is ALWAYS green and
    surfaces nothing on its own. The comment now states the truth and points at
    the ops-monitor STEP-conclusion probe that actually surfaces failures.

(b) scripts/ops-monitor-check.sh: extend the step-conclusion probe to cover
    BOTH nightlies. New SCENARIO_NIGHTLY_STATUS block queries the LATEST
    SCHEDULED scenario run and reads the 'make test-scenario' STEP conclusion
    via `gh run view --json jobs` (NOT the run/workflow conclusion, which
    continue-on-error masks). A not-green step surfaces as checks['scenario-
    nightly'] + the 'scenario-nightly-fail' digest signal, mirroring the
    nightly-race probe. Follows the dquote-safe pattern (hk-2mw1x): the embedded
    python uses only single-quoted string literals.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TepxLRzEDYuXypuN77i9cT
…kes (hk-plw4z)

CI on this branch showed check-short's STEP failing on BOTH runs with different
tests each time (run1: cmd/harmonik; run2: TestIdempStep4/Step3 +
TestDaemonWatchdog_PhantomReviveGuard) — stochastic -race self-saturation, the
exact failure mode the cap targets. -parallel=2 was not enough on the 2-vCPU
runner, so drop to the proven-clean value: -parallel=1 (fully serial
intra-package; stilgar proved 0 moles at 1). -p left at default; -race stays ON.

check-race-full is untouched (must stay full-parallel, no cap).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TepxLRzEDYuXypuN77i9cT
… (hk-plw4z)

Both -parallel=1 runs panicked 'test timed out after 10m0s' (consistent).
Root cause: -parallel=1 serializes intra-package tests, and the heaviest
package's serial -race run exceeds Go's DEFAULT 10m per-package test timeout
(the check-short line set no -timeout). N=1 kills saturation but is too slow,
so keep -parallel=1 AND give serial -race headroom with an explicit -timeout=20m.

check-race-full is untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TepxLRzEDYuXypuN77i9cT
…-race saturation (hk-plw4z)

-parallel=1 capped intra-package parallelism but left -p at default, so the
heavy internal/daemon -race marathon (~930s) ran concurrently with the timing-
sensitive internal/supervise TestDaemonWatchdog_PhantomReviveGuard and starved
it under CPU load → 2.00s flake on run 1ed5ed9. -p=1 serializes packages (each
still uses full cores internally; NOT GOMAXPROCS=1), removing the contention.
-race + -parallel=1 + -timeout=20m unchanged. A5-convergence.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TepxLRzEDYuXypuN77i9cT
@gregberns
gregberns force-pushed the hk-plw4z-a5-convergence branch from 5f0877c to 7f2148e Compare July 8, 2026 19:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant