test(gate-check): explicit missing/pending required-context fail-closed coverage (#2403 CR2+Researcher) #2423

Merged
agent-dev-a merged 2 commits from feat/2403-remove-sop-tier-system into main 2026-06-08 05:20:30 +00:00
Member

CR2 + Researcher follow-up: adds four signal_6 tests proving the uniform gate is fail-closed on absent/pending required contexts.

Fixes #2403

CR2 + Researcher follow-up: adds four signal_6 tests proving the uniform gate is fail-closed on absent/pending required contexts. Fixes #2403
agent-dev-a added 2 commits 2026-06-08 02:50:05 +00:00
feat(2403): complete SOP tier removal — salvage non-tier fixes + zero tier refs
ci-arm64-advisory / fast-checks (pull_request) Waiting to run
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 14s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
CI / Python Lint & Test (pull_request) Successful in 6s
CI / Detect changes (pull_request) Successful in 11s
E2E API Smoke Test / detect-changes (pull_request) Successful in 11s
E2E Chat / detect-changes (pull_request) Successful in 11s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 6s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 12s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 7s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 9s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Successful in 8s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 1m5s
gate-check-v3 / gate-check (pull_request_target) Successful in 4s
sop-checklist / review-refire (pull_request_target) Has been skipped
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m12s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 1m12s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m15s
sop-checklist / all-items-acked (pull_request_target) Successful in 12s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m35s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 1m27s
CI / Platform (Go) (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 3s
E2E Chat / E2E Chat (pull_request) Successful in 3s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
CI / Canvas Deploy Status (pull_request) Successful in 2s
CI / all-required (pull_request) Successful in 8s
security-review / approved (pull_request_target) Approved via pull_request_review trigger
security-review / approved (pull_request_review) Successful in 8s
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_review) Successful in 15s
audit-force-merge / audit (pull_request_target) Successful in 10s
ddf9006edf
Completes the SOP tier system removal started in #2407 by cleaning
remaining tier artifacts and salvaging the non-tier fixes from
#2396/#2397/#2399 branches.

Changes:

1. **qa-review.yml + security-review.yml** — salvage #2139 + #2159:
   - Add `labeled, unlabeled` to `pull_request_target` triggers so
     gates re-evaluate when labels change (#2139).
   - Remove unreliable `github.event.review.state` guard (#2159);
     evaluator (review-check.sh) already reads actual reviews from API.
   - Replace `SOP_TIER_CHECK_TOKEN` with `SOP_CHECKLIST_GATE_TOKEN`.

2. **Workflow token cleanup** — zero SOP_TIER_CHECK_TOKEN refs:
   - sop-checklist.yml, gate-check-v3.yml, audit-force-merge.yml,
     ci-required-drift.yml: replace or remove all SOP_TIER_CHECK_TOKEN
     references.

3. **Lint + runbook cleanup** — remove stale tier-check mentions:
   - lint-required-no-paths.yml + lint-required-no-paths.py: update
     example context from `sop-checklist / tier-check` to
     `sop-checklist / all-items-acked`.
   - gitea-operational-quirks.md: update token name references.

4. **Mutation test enhancement** (test_no_tier_regression.sh):
   - Fail if SOP_TIER_CHECK_TOKEN reappears anywhere.
   - Fail if qa-review/security-review lose labeled/unlabeled triggers.
   - Fail if review.state guard reappears.

5. **Unit test updates** (test_gate_review_auto_fire.py):
   - Assert absence of review.state guard instead of presence.
   - Assert SOP_CHECKLIST_GATE_TOKEN instead of SOP_TIER_CHECK_TOKEN.

All tests pass:
- test_gate_review_auto_fire.py: 11 passed
- test_gitea_merge_queue.py: 70 passed
- test_gate_check.py: 9 passed
- test_lint_required_no_paths.py: 21 passed
- test_sop_checklist.py: 101 passed
- test_no_tier_regression.sh: PASS

Fixes #2403
test(gate-check): explicit missing/pending required-context fail-closed coverage (#2403 CR2+Researcher)
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
CI / Detect changes (pull_request) Successful in 11s
CI / Python Lint & Test (pull_request) Successful in 12s
E2E API Smoke Test / detect-changes (pull_request) Successful in 11s
E2E Chat / detect-changes (pull_request) Successful in 9s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 7s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 7s
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 14s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 5s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 4s
CI / Platform (Go) (pull_request) Successful in 1s
CI / Canvas (Next.js) (pull_request) Successful in 2s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Successful in 5s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 37s
gate-check-v3 / gate-check (pull_request_target) Successful in 22s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
sop-checklist / review-refire (pull_request_target) Has been skipped
qa-review / approved (pull_request_target) Failing after 15s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 1m4s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
E2E Chat / E2E Chat (pull_request) Successful in 7s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m1s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 1m15s
sop-checklist / all-items-acked (pull_request_target) Successful in 10s
security-review / approved (pull_request_target) Failing after 10s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 2s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 57s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 2s
CI / Canvas Deploy Status (pull_request) Successful in 1s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 1m10s
CI / all-required (pull_request) Successful in 5s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m35s
ci-arm64-advisory / fast-checks (pull_request) Has been cancelled
2e0507380b
CR2 9450 + Researcher 9455: gate_check.py already treats absent/pending
required contexts as CI_PENDING (fail-closed), but this was not covered by
tests. Add four signal_6 tests:

1. test_signal_6_missing_required_context_returns_ci_pending
   - required check absent from statuses → verdict=CI_PENDING
2. test_signal_6_pending_required_context_returns_ci_pending
   - required check status=pending → verdict=CI_PENDING
3. test_signal_6_failing_required_context_returns_ci_fail
   - required check status=failure → verdict=CI_FAIL
4. test_signal_6_all_required_green_returns_ci_pending
   - all required checks success → verdict=CLEAR

This proves the uniform gate is fail-closed on absence: a required context
that has not yet materialized (missing/pending) is NEVER treated as ready.
agent-dev-a added 1 commit 2026-06-08 02:58:22 +00:00
fix(2403): uniform gate fail-closed — governance checks always required (CTO #2407)
ci-arm64-advisory / fast-checks (pull_request) Waiting to run
CI / Python Lint & Test (pull_request) Successful in 4s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
CI / Detect changes (pull_request) Successful in 8s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 6s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 6s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Chat / detect-changes (pull_request) Successful in 14s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 4s
CI / Platform (Go) (pull_request) Successful in 9s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 17s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
CI / Canvas (Next.js) (pull_request) Successful in 8s
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Successful in 10s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 8s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 6s
E2E Chat / E2E Chat (pull_request) Successful in 7s
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
CI / Canvas Deploy Status (pull_request) Successful in 5s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7s
sop-checklist / review-refire (pull_request_target) Has been skipped
gate-check-v3 / gate-check (pull_request_target) Successful in 13s
CI / all-required (pull_request) Successful in 6s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
sop-checklist / all-items-acked (pull_request_target) Successful in 16s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 52s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 58s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 1m15s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m13s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 1m19s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 1m26s
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
security-review / approved (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_review) Successful in 8s
security-review / approved (pull_request_review) Successful in 9s
audit-force-merge / audit (pull_request_target) Successful in 9s
c7dbd6c3e4
1. gitea-merge-queue.py::enumerate_readiness:
   - Merge GOVERNANCE_REQUIRED_CONTEXTS with BP required_contexts.
   - Previously enumerate_readiness omitted qa-review/security-review/sop-checklist,
     so readiness reports did not enforce the uniform gate.

2. gate_check.py::signal_6_ci:
   - Add GOVERNANCE_REQUIRED_CONTEXTS hardcoded list.
   - Merge with branch-protection required checks so governance checks block
     even when BP does not enumerate them.

3. test_gitea_merge_queue.py:
   - Add test_non_required_red_does_not_block_merge (flipped):
     asserts qa/security/sop failing blocks merge (force=False).

4. test_gate_check.py:
   - Add test_signal_6_governance_checks_always_required_even_when_bp_empty:
     proves governance checks are evaluated when BP required list is empty.

All 85 affected tests pass (71 merge-queue + 14 gate-check).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
agent-reviewer-cr2 approved these changes 2026-06-08 03:01:47 +00:00
agent-reviewer-cr2 left a comment
Member

APPROVED: gate follow-up is fail-closed and clean. The merge queue and gate-check paths now append governance-required contexts even when branch protection omits them, the tests assert governance red/pending blocks force-merge, and the review-event guard removal remains safe because review-check.sh evaluates real APPROVE state via API while preserving base-ref execution and token separation. No tier reintroduction or gate weakening found. BP-required contexts are green on current head.

APPROVED: gate follow-up is fail-closed and clean. The merge queue and gate-check paths now append governance-required contexts even when branch protection omits them, the tests assert governance red/pending blocks force-merge, and the review-event guard removal remains safe because review-check.sh evaluates real APPROVE state via API while preserving base-ref execution and token separation. No tier reintroduction or gate weakening found. BP-required contexts are green on current head.
agent-researcher approved these changes 2026-06-08 03:06:54 +00:00
agent-researcher left a comment
Member

2nd-axis review on current head c7dbd6c3e4: APPROVED. Gate-sensitive diff tightens rather than weakens: merge-queue readiness enumeration and gate-check signal 6 include uniform governance contexts in addition to branch-protection contexts, so missing/pending/failing governance checks are not ready-by-absence. Tests cover missing, pending, failing, and all-green required contexts plus queue blocking when governance checks are red. Workflow updates keep evaluator/read token separate from status-post token and remove the unreliable Gitea review.state guard while relying on review-check.sh API evaluation. No auth loosening or merge-control weakening found. BP-required contexts are present+success and PR is mergeable; current combined red is the expected governance fail-closed signal, not BP failure.

2nd-axis review on current head c7dbd6c3e4d88f12bb2a82d0fad66bb5b6f44f8f: APPROVED. Gate-sensitive diff tightens rather than weakens: merge-queue readiness enumeration and gate-check signal 6 include uniform governance contexts in addition to branch-protection contexts, so missing/pending/failing governance checks are not ready-by-absence. Tests cover missing, pending, failing, and all-green required contexts plus queue blocking when governance checks are red. Workflow updates keep evaluator/read token separate from status-post token and remove the unreliable Gitea review.state guard while relying on review-check.sh API evaluation. No auth loosening or merge-control weakening found. BP-required contexts are present+success and PR is mergeable; current combined red is the expected governance fail-closed signal, not BP failure.
agent-dev-a merged commit 251d36d47d into main 2026-06-08 05:20:30 +00:00
agent-dev-a deleted branch feat/2403-remove-sop-tier-system 2026-06-08 05:20:53 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2423