molecule-core/.gitea/workflows
core-devops ecbfa60f04 fix(ci): close fail-open in qa/security review checks (RFC#324 v1.3 §A1.1) + drop dead jq fallback
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>
2026-05-11 11:45:59 -07:00
..
audit-force-merge.yml feat(internal#219 §4+§6): port ci-required-drift + audit-force-merge sidecar from CP 2026-05-11 00:35:25 -07:00
block-internal-paths.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
cascade-list-drift-gate.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
check-migration-collisions.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
ci-required-drift.yml feat(internal#219 §4+§6): port ci-required-drift + audit-force-merge sidecar from CP 2026-05-11 00:35:25 -07:00
ci.yml ci: port .github/workflows/ci.yml to .gitea/workflows/ci.yml (RFC internal#219 §1) 2026-05-10 20:48:38 -07:00
continuous-synth-e2e.yml refactor(ci): drop "canary-" prefix → staging-smoke/staging-verify (Hongming directive 2026-05-11) (#443) 2026-05-11 11:25:29 +00:00
e2e-api.yml ci: port 10 E2E workflows to .gitea/workflows/ (RFC internal#219 §1, Category C-2) 2026-05-10 21:23:30 -07:00
e2e-staging-canvas.yml fix(ci): canonicalize MOLECULE_STAGING_ADMIN_TOKEN -> CP_STAGING_ADMIN_API_TOKEN (post-#443 rebase) + drop staging-smoke continue-on-error 2026-05-11 04:33:56 -07:00
e2e-staging-external.yml fix(ci): canonicalize MOLECULE_STAGING_ADMIN_TOKEN -> CP_STAGING_ADMIN_API_TOKEN (post-#443 rebase) + drop staging-smoke continue-on-error 2026-05-11 04:33:56 -07:00
e2e-staging-saas.yml fix(ci): restore pull_request trigger + pr-validate to e2e-staging-saas 2026-05-11 18:14:50 +00:00
e2e-staging-sanity.yml fix(ci): canonicalize MOLECULE_STAGING_ADMIN_TOKEN -> CP_STAGING_ADMIN_API_TOKEN (post-#443 rebase) + drop staging-smoke continue-on-error 2026-05-11 04:33:56 -07:00
gate-check-v3.yml fix(ci): scope operational workflows to intended trigger windows (#504, #419) 2026-05-11 18:14:50 +00:00
handlers-postgres-integration.yml ci: port 10 E2E workflows to .gitea/workflows/ (RFC internal#219 §1, Category C-2) 2026-05-10 21:23:30 -07:00
harness-replays.yml fix(ci): pass commits JSON via env block to avoid bash quoting break 2026-05-11 17:50:17 +00:00
lint-curl-status-capture.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
main-red-watchdog.yml feat(ci): main-red watchdog (Option C of main-never-red directive) — closes #420 2026-05-11 00:36:20 -07:00
publish-canvas-image.yml refactor(ci): drop "canary-" prefix → staging-smoke/staging-verify (Hongming directive 2026-05-11) (#443) 2026-05-11 11:25:29 +00:00
publish-runtime-autobump.yml fix(ci): add continue-on-error to publish-runtime-autobump (closes #504) 2026-05-11 17:41:27 +00:00
publish-runtime.yml fix(ci): cascade wait-step SHA capture leaked pip stdout (4th defect) 2026-05-10 19:51:18 -07:00
publish-workspace-server-image.yml fix(workspace): replace asyncio.get_event_loop().run_until_complete with asyncio.run() (#307) (#498) 2026-05-11 15:37:34 +00:00
qa-review.yml fix(ci): close fail-open in qa/security review checks (RFC#324 v1.3 §A1.1) + drop dead jq fallback 2026-05-11 11:45:59 -07:00
railway-pin-audit.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
redeploy-tenants-on-main.yml refactor(ci): drop "canary-" prefix → staging-smoke/staging-verify (Hongming directive 2026-05-11) (#443) 2026-05-11 11:25:29 +00:00
redeploy-tenants-on-staging.yml refactor(ci): drop "canary-" prefix → staging-smoke/staging-verify (Hongming directive 2026-05-11) (#443) 2026-05-11 11:25:29 +00:00
runtime-pin-compat.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
runtime-prbuild-compat.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
secret-pattern-drift.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00
secret-scan.yml ci(secret-scan): port from .github/ to .gitea/ — fix unsatisfiable required check 2026-05-08 20:13:06 -07:00
security-review.yml fix(ci): close fail-open in qa/security review checks (RFC#324 v1.3 §A1.1) + drop dead jq fallback 2026-05-11 11:45:59 -07:00
sop-tier-check.yml fix(sop-tier-check): flip jq install to apt-get-first (infra#241 follow-up) 2026-05-11 08:19:02 +00:00
sop-tier-refire.yml feat(ci): sop-tier-check refire workflow via issue_comment (internal#292) 2026-05-11 02:44:31 -07:00
staging-smoke.yml fix(ci): canonicalize MOLECULE_STAGING_ADMIN_TOKEN -> CP_STAGING_ADMIN_API_TOKEN (post-#443 rebase) + drop staging-smoke continue-on-error 2026-05-11 04:33:56 -07:00
staging-verify.yml refactor(ci): drop "canary-" prefix → staging-smoke/staging-verify (Hongming directive 2026-05-11) (#443) 2026-05-11 11:25:29 +00:00
sweep-aws-secrets.yml fix(ci): reconcile sweep workflow secrets — use confirmed-existing names (#482) 2026-05-11 14:07:53 +00:00
sweep-cf-orphans.yml fix(ci): reconcile sweep workflow secrets — use confirmed-existing names (#482) 2026-05-11 14:07:53 +00:00
sweep-cf-tunnels.yml fix(ci): reconcile sweep workflow secrets — use confirmed-existing names (#482) 2026-05-11 14:07:53 +00:00
sweep-stale-e2e-orgs.yml fix(ci): sweep-stale-e2e-orgs reference + drop continue-on-error (closes EC2 leak) (#461) 2026-05-11 12:05:36 +00:00
test-ops-scripts.yml ci: port 9 gates/lints/audits to .gitea/workflows/ (RFC internal#219 §1, Category C-1) 2026-05-10 21:18:11 -07:00