Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,22 @@ this file. The format follows Keep a Changelog, and versioned releases follow
Semantic Versioning where the repository publishes a release.

## [Unreleased]
- **Fix a stale `test_strix_quick_gate.sh` assertion left broken by the `#1630`
scheduler-cadence lengthening.** `pr-review-merge-scheduler.yml`'s repository-local
heartbeat was changed from a quarter-hourly `cron: "*/30 * * * *"` to an hourly
`cron: "30 * * * *"` (see `docs/doctoring/actions-queue-saturation-hourly-sweep.md`),
and the Python regression `tests/test_actions_queue_saturation_scheduler_cadence.py`
was updated to match at the time — but the parallel bash contract in
`scripts/ci/test_strix_quick_gate.sh` still asserted the literal old string, so
every PR whose required `exact-head-path-policy` check ran this script against a
current `main` checkout failed on an assertion the workflow file itself could no
longer satisfy, regardless of the PR's own diff. Updated the assertion to the
current cron string and corrected an adjacent stale "15-minute organization sweep
/ 30-minute scheduled scan" description to the current hourly/hourly cadence.
Verified: `bash scripts/ci/test_strix_quick_gate.sh` now passes against unmodified
`main` (confirmed failing before this fix, on the same clean clone); full suite
unaffected (2600+ passed, 100% coverage, 100% docstrings) since this is a
bash-only assertion string with no Python-side counterpart to update.
- **Consolidate the two genuinely duplicate quality-CI callers behind one reusable
`workflow_call` gate; leave the other six alone.** An audit of the 8
`.github/workflows/*-quality-ci.yml` bootstrap-templated files found only one pair —
Expand Down
65 changes: 65 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
Expand Up @@ -2628,6 +2628,71 @@ Higgins, S. S., Crepalde, N., & Fernandes, L. (2021). Segmented multiplexity: A

**Evidence / acceptance.** Permanent tests forbid retry/deadline/sampling symbols in the caller and prove one gateway request, one attempt annotation, control-character-safe telemetry, missing-value rejection, valid trailing-comma normalization, and exact changed-line guidance. Fresh exact-head repository checks and reviews remain the admission authority; predecessor-head evidence is not transferable. The remaining runtime work is to preserve distinct `request_too_large`, discovery, rate-limit, provider transport, malformed-output, stale-head, and sandbox-command-timeout categories in hosted logs.

## 2026-09-02 `test_strix_quick_gate.sh` stale cron assertion left broken by the `#1630` cadence lengthening

**Problem.** The required `exact-head-path-policy` check (which runs `bash
scripts/ci/test_strix_quick_gate.sh` against the exact PR head) was failing on
multiple, unrelated open PRs (observed directly on `.github#1476`, a PR whose own
diff never touches this script or the scheduler workflow) with:

```
FAIL: scheduler wakes frequently enough to clear auto-merge PRs that become stale
after their initial PR events (missing 'cron: "*/30 * * * *"')
```

**Root cause.** `#1630` (referenced in `docs/doctoring/actions-queue-saturation-hourly-sweep.md`)
deliberately lengthened `pr-review-merge-scheduler.yml`'s repository-local heartbeat
from a quarter-hourly `cron: "*/30 * * * *"` to an hourly `cron: "30 * * * *"` to
reduce Actions-capacity pressure during the sustained organization-wide queue
saturation this session repeatedly documented. The Python regression
`tests/test_actions_queue_saturation_scheduler_cadence.py` was correctly updated at
the time (it now asserts `'- cron: "30 * * * *"' in workflow` and explicitly
`'*/30 * * * *' not in workflow`) — but the parallel bash contract test,
`scripts/ci/test_strix_quick_gate.sh`, was not, and kept asserting the literal old
string. This is a genuine, reproducible defect on protected `main` itself, not a
symptom of any one PR being stale: I confirmed it by running the script directly
against an unmodified, freshly cloned `main` (commit `8c085835`) before making any
change, and it failed with the identical message.

**Why this matters at organization scale.** `exact-head-path-policy` is a required
check for every PR touching Strix-quick-gate-covered paths, checked out against
each PR's own exact head but running this trusted base-branch script. Since the
assertion can never pass against the current, correctly-updated workflow file, this
was a standing, silent block on an unbounded number of unrelated PRs across the
whole `.github` PR queue until fixed at the root -- exactly the class of "root
cause outside any one PR's diff" issue this session's operating directive requires
be fixed at the canonical location rather than worked around per-PR.

**Fix.** Updated the one stale assertion (`scripts/ci/test_strix_quick_gate.sh`)
from `'cron: "*/30 * * * *"'` to `'cron: "30 * * * *"'`, matching the workflow's
actual current value and the already-correct Python-side assertion. Also corrected
an adjacent stale human-readable description ("scheduler isolates the 15-minute
organization sweep from the separate 30-minute scheduled scan") to the current
hourly/hourly cadence -- both `org-queue-sweep` and this repository-local scan are
now hourly, so the old minute figures described a schedule that no longer exists.

**Verification.** `bash scripts/ci/test_strix_quick_gate.sh` — confirmed FAIL on
unmodified `main` before the change, confirmed PASS after. Full suite:
`coverage run -m pytest tests -q` — all passed; `coverage report --fail-under=100`
— 100% on `scripts/ci/`; `interrogate` — 100%. This is a bash-string-only fix with
no Python production code touched, so the full-suite pass is a non-regression
check, not evidence the fix itself works — the direct before/after script run is
that evidence.

**Risk of this fix itself.** Essentially none: a one-line literal-string update in
a test assertion, verified to both fail before and pass after against the exact
same unmodified `main` checkout. No workflow, script, or other test file changed.

**Expected effect.** `exact-head-path-policy` stops failing organization-wide PRs
on this assertion once this fix reaches protected `main`; any PR whose branch has
already synced past this point (or syncs after) picks it up automatically.

**Follow-up.** None identified — this closes the specific gap. If a future cadence
change lands again, the durable fix is process, not code: update every test that
asserts the literal cron string (currently exactly these two files) in the same PR
that changes the cron value, per this repo's own "contract tests pin workflows AND
prose" convention already stated in `CLAUDE.md`.

## Item 4 fresh evidence: gateway 500 after a 649.5s "connecting" phase with `served_model=unknown` — 2026-09-03

**Status:** A live, current instance of item 4's still-open telemetry complaint, distinct from the already-resolved html4tree/900-second caller-repair-deadline case above (that mechanism was removed by PR #1672). Recorded here from a fresh, exact job log. Two distinct defects were found in the one error line below, both root-caused and both with a fix proposed but not yet merged: a caller-owned phase-mislabeling bug (this repository's own `scripts/ci/noema_review_gate.py`, see below) and a gateway-owned attribution gap (`contextual-orchestrator`'s `_invoke` failover loop, relayed to and fixed by the peer session with deep context in that repo, see below).
Expand Down
4 changes: 2 additions & 2 deletions scripts/ci/test_strix_quick_gate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1559,11 +1559,11 @@ assert_pr_review_merge_scheduler_uses_github_actions_bot_token() {
assert_file_contains "$workflow_file" 'pull_request_target:' "scheduler can run as an organization required workflow without repository-local copies"
assert_file_contains "$workflow_file" 'auto_merge_enabled' "scheduler rechecks already stale PRs as soon as native auto-merge is enabled"
assert_file_contains "$workflow_file" 'workflows: ["Required OpenCode Review", "Strix Security Scan"]' "scheduler reruns after review or security evidence completion so approvals can trigger merge/update actions"
assert_file_contains "$workflow_file" 'cron: "*/30 * * * *"' "scheduler wakes frequently enough to clear auto-merge PRs that become stale after their initial PR events"
assert_file_contains "$workflow_file" 'cron: "30 * * * *"' "scheduler wakes frequently enough to clear auto-merge PRs that become stale after their initial PR events"
assert_file_not_contains "$workflow_file" "github.event.pull_request.number == 240" "scheduler must not hard-code repository-specific PR bypasses"
assert_file_contains "$workflow_file" "github.event_name == 'pull_request_target' && format('pr-{0}', github.event.pull_request.number)" "scheduler scopes pull_request_target concurrency to the active PR"
assert_file_contains "$workflow_file" "github.event_name == 'workflow_run' && github.event.workflow_run.pull_requests[0].number && format('pr-{0}', github.event.workflow_run.pull_requests[0].number)" "scheduler scopes workflow_run concurrency to the completed review PR"
assert_file_contains "$workflow_file" "github.event_name == 'schedule' && format('schedule-{0}', github.event.schedule)" "scheduler isolates the 15-minute organization sweep from the separate 30-minute scheduled scan"
assert_file_contains "$workflow_file" "github.event_name == 'schedule' && format('schedule-{0}', github.event.schedule)" "scheduler isolates the hourly organization sweep from the separate hourly repository-local scan"
assert_file_contains "$workflow_file" "github.event_name == 'repository_dispatch' && github.event.client_payload.target_repository != '' && github.event.client_payload.pr_number != ''" "scheduler scopes targeted manual queue scans to the requested PR"
assert_file_contains "$workflow_file" "cancel-in-progress: \${{ github.event_name == 'pull_request_target' || github.event_name == 'pull_request_review' || github.event_name == 'repository_dispatch' || (github.event_name == 'workflow_run' && !github.event.workflow_run.pull_requests[0].number) }}" "scheduler cancels stale PR/review/manual queue scans instead of accumulating merge/update attempts"
assert_file_contains "$workflow_file" "timeout-minutes: 60" "organization sweep has enough headroom to finish the complete repository walk"
Expand Down
Loading