feat(ci): add qa-review + security-review checks (RFC#324 Step 1 of 5) #535
Merged
claude-ceo-assistant
merged 3 commits from 2026-05-11 18:54:52 +00:00
infra/rfc-324-workflow-add into main
3 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| d5abcf103b |
Merge branch 'main' into infra/rfc-324-workflow-add
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
gate-check-v3 / gate-check (pull_request) Failing after 28s
sop-tier-check / tier-check (pull_request) Successful in 18s
E2E API Smoke Test / detect-changes (pull_request) Successful in 48s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 50s
CI / Detect changes (pull_request) Successful in 56s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 50s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 55s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 10s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8s
CI / Platform (Go) (pull_request) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 7s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 9s
CI / Canvas (Next.js) (pull_request) Successful in 9s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 9s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
audit-force-merge / audit (pull_request) Successful in 20s
|
|||
| ecbfa60f04 |
fix(ci): close fail-open in qa/security review checks (RFC#324 v1.3 §A1.1) + drop dead jq fallback
Some checks failed
publish-runtime-autobump / bump-and-tag (pull_request) Has been skipped
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
sop-tier-check / tier-check (pull_request) Successful in 19s
gate-check-v3 / gate-check (pull_request) Failing after 30s
CI / Detect changes (pull_request) Successful in 44s
E2E API Smoke Test / detect-changes (pull_request) Successful in 43s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 43s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 37s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 45s
publish-runtime-autobump / pr-validate (pull_request) Successful in 47s
CI / Platform (Go) (pull_request) Successful in 8s
CI / Canvas (Next.js) (pull_request) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 11s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 12s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 12s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 2m15s
CI / Python Lint & Test (pull_request) Successful in 7m16s
Addresses hongming-pc review #1421 on PR #535. Blocker 1 (fail-open privilege gate): Original v1.2 design `if:`-gated the "Check out BASE" and "Evaluate" steps on the privilege-check step's `proceed` output. A non-collaborator commenting `/qa-recheck` produced proceed=false → both steps skipped → job conclusion = success → `qa-review / approved` context published as success with ZERO real APPROVE. Any visitor could green the gate. Fix per RFC#324 v1.3 §A1.1 option (b): drop privilege-gating of the eval entirely. The eval is read-only and idempotent (reads pulls/{N}/reviews + teams/{id}/members/{u}, both server-side state uninfluenced by who commented). Re-running on a non-collaborator's comment is harmless: if a real team-member APPROVE exists, the eval flips green; if not, it stays red. The privilege step is retained as a `::notice::` log line only (griefer-spotting), not a gate. Non-blocking nit 5 (dead jq fallback): `apt-get install jq` (no root) and `curl -o /usr/local/bin/jq` (no write perm on uid-1001 rootless runner) both can't succeed. Per feedback_ci_runner_install_needs_writable_path + #391/#402, jq is already baked into runner-base. Replace the install dance with a clear `exit 1` + diagnostic so a missing-jq runner fails loud rather than confusingly. Smoke-test (mocked Gitea API): no-approve → exit 1 (gate red) self-approve → exit 1 (gate red) dismissed-approve → exit 1 (gate red) non-team-approve → exit 1 (gate red) team-approve → exit 0 (gate green) Blocker 2 (A1-α event-suffix context-name verification) is the smoke-PR's job and is flagged in a follow-up comment on this PR — does not require workflow changes here. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
|||
| e922351b78 |
feat(ci): add qa-review + security-review checks (RFC#324 Step 1 of 5)
Some checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 16s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 18s
CI / Detect changes (pull_request) Successful in 1m6s
E2E API Smoke Test / detect-changes (pull_request) Successful in 1m13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 1m9s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 1m13s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m5s
CI / Platform (Go) (pull_request) Successful in 9s
CI / Canvas (Next.js) (pull_request) Successful in 11s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 8s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 8s
sop-tier-check / tier-check (pull_request) Successful in 18s
gate-check-v3 / gate-check (pull_request) Failing after 27s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Adds the two job-conclusion-as-status review-gate workflows that will
replace sop-tier-check (Step 3 of RFC#324). Both:
- Trigger on pull_request_target (opened/synchronize/reopened) for the
initial status, plus issue_comment for /qa-recheck and /security-recheck
slash-command refire (Gitea 1.22.6 doesn't refire on pull_request_review
per go-gitea/gitea#33700).
- Use job name 'approved' so the published context is 'qa-review / approved'
and 'security-review / approved' — NO POST /statuses, NO write:repository
scope (RFC#324 v1.1 addendum A1-α).
- Privilege-check slash-command commenters via /repos/.../collaborators/{u}
(NOT github.event.comment.author_association — that field doesn't exist
on Gitea 1.22.6, defect #1 from sop-tier-refire).
- Run under pull_request_target's BASE-branch trust boundary; checkout
pins to default_branch (never head.sha) and the workflows only HTTP-call
the Gitea API; no PR-head code is executed (RFC#324 A4 + internal#116).
Shared evaluator lives at .gitea/scripts/review-check.sh, parameterized
by TEAM + TEAM_ID. Pass condition: at least one APPROVED, non-dismissed,
non-author review whose user is a member of the named team.
Branch-protection flip (Step 2) is intentionally NOT included in this PR.
That is Owners-tier and blocked on (a) the first run of these workflows
capturing the EXACT status-context names, and (b) RFC_324_TEAM_READ_TOKEN
provisioning (filed as internal#325).
Refs: internal#324, internal#325 (token follow-up).
Closes: nothing yet — Steps 2 and 3 must land before #292/#319/#321 close.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|