molecule-core/.gitea/workflows
core-devops 72df12ecef
All checks were successful
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 16s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 15s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 33s
CI / Detect changes (pull_request) Successful in 43s
E2E API Smoke Test / detect-changes (pull_request) Successful in 44s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 40s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 13s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 11s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7s
CI / Platform (Go) (pull_request) Successful in 8s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 7s
CI / Canvas (Next.js) (pull_request) Successful in 9s
CI / Python Lint & Test (pull_request) Successful in 15s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m25s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 6s
feat(ci): sop-checklist-gate — peer-ack merge gate (RFC#351 Phase 2)
RFC#351 Step 2 of 6: implementation MVP of the SOP-checklist peer-ack
merge gate. NOT yet wired to branch protection (Phase 4 needs separate
authorization).

What:
- .gitea/sop-checklist-config.yaml — 7-item checklist with slug,
  numeric_alias (1..7), pr_section_marker, required_teams. Includes
  tier-aware failure-mode map: tier:high/medium=hard, tier:low=soft,
  default=hard (never silently lower the bar).
- .gitea/scripts/sop-checklist-gate.py — parses PR body + comments,
  computes per-item ack state, posts commit-status
  "sop-checklist / all-items-acked (pull_request)".
- .gitea/scripts/tests/test_sop_checklist_gate.py — 51 unit tests
  covering slug normalization, directive parsing, section-marker
  detection, ack-state computation (self-ack reject, revoke
  semantics, multi-user/multi-item, numeric aliases), tier-mode
  selection, and end-to-end happy path.
- .gitea/workflows/sop-checklist-gate.yml — pull_request_target
  [opened/edited/synchronize/reopened] + issue_comment
  [created/edited/deleted]. Checks out BASE ref only (trust boundary
  per RFC#324 §A4). Mirrors qa-review/security-review patterns.

Why:
Hongming 2026-05-12T05:42Z asked for SOP-enforcing CI/CD that requires
peer-ack on each checklist item before merge. Composes the existing
patterns (scripts-lint PR-body parser + RFC#324 persona-whitelist
commit-status + sop-tier-check tier-awareness) into one gate.

Slash-command contract:
  /sop-ack <slug> [note]      — register peer-ack (most-recent wins)
  /sop-revoke <slug> [reason] — invalidate own prior ack

Slug normalization accepts kebab-case, snake_case, natural-spaces,
or numeric 1..7 shorthand (all canonicalize to kebab-case via the
config-driven alias table).

Tests: 51/51 pass locally. Dry-run probe against PR#685 verified the
full pipeline (PR fetch, comment fetch, ack computation, status
description rendering inside the 140-char budget).

Not yet:
- Phase 3 (24h soak)
- Phase 4 (BP PATCH to require this context — needs Hongming GO)
- Phase 5 (cross-repo)
- Phase 6 (dev-sop.md codification)
- SOP_CHECKLIST_GATE_TOKEN secret provisioning (separate follow-up;
  fail-closed until provisioned, same as RFC_324_TEAM_READ_TOKEN
  pattern in qa-review.yml).

Cross-links:
- internal#351 (RFC body)
- RFC#324 (qa-review/security-review — reused mechanism)
- internal#346 (dev-sop.md SOP-14..SOP-20 — sibling rules)
- feedback_pull_request_review_no_refire (why issue_comment trigger)
- feedback_checkpointed_workflow_over_good_practice_doc (motivation)
- feedback_fix_root_not_symptom (default-mode=hard rationale)

## What
Add a SOP-checklist peer-ack merge gate: workflow + script + config + 51 unit tests.

## Why
Hongming-requested mechanism to enforce SOP via CI/CD: each PR checklist
item must be peer-acked before merge, with team-membership-verified
ackers and tier-aware failure mode.

## Verification
- 51/51 unit tests pass (slug normalization, parse_directives, section
  marker detection, ack-state including self-ack rejection + revoke
  semantics, tier-mode mapping, end-to-end happy path).
- YAML lint clean (yaml.safe_load + lint-workflow-yaml.py on the new
  workflow — pre-existing fatals on unrelated files only).
- Python syntax clean (py_compile).
- Dry-run against live PR#685: PR fetch, comment enumeration, status
  description render all within 140-char budget — works end-to-end.

## Tier
tier:medium — net-new CI workflow; no production impact; no BP change
yet (Phase 4 separate auth).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 06:08:36 +00:00
..
audit-force-merge.yml fix(ci): RFC internal#219 Phase 4 — all-required sentinel enforced, stable jobs hard-fail 2026-05-12 04:09:44 +00: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 fix(ci): ci-required-drift handles 403/404 on protection endpoint gracefully 2026-05-12 03:13:37 +00:00
ci.yml fix(ci)(interim): re-add continue-on-error to platform-build (mc#664 fix-forward in flight) 2026-05-12 04:40:32 +00: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(sre): add explicit 15s timeout to gate-check-v3 HTTP calls (closes #603) 2026-05-11 23:36:21 +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): strip JSON5 comments from manifest.json before clone-manifest.sh 2026-05-11 22:19:55 +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
lint-required-no-paths.yml feat(ci)(hard-gate): lint-required-workflows-no-paths-filter (structural enforcement of feedback_path_filtered_workflow_cant_be_required) 2026-05-12 05:48:22 +00:00
lint-workflow-yaml.yml feat(ci)(hard-gate): lint-workflow-yaml catches Gitea-1.22.6-hostile shapes 2026-05-12 05:50:55 +00:00
main-red-watchdog.yml fix(ci): status-reaper rev3 widens window 10->30 + raises watchdog timeout + re-enables both crons 2026-05-11 20:29:06 -07:00
publish-canvas-image.yml revert(ci): restore ubuntu-latest runner for publish workflows 2026-05-12 00:02:03 +00:00
publish-runtime-autobump.yml fix(ci): publish-runtime-autobump bump-and-tag condition is always-skipped 2026-05-11 20:41:57 +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 revert(ci): restore ubuntu-latest runner for publish workflows 2026-05-12 00:02:03 +00:00
qa-review.yml fix(ci)(security): stop token appearing in curl argv (#541) 2026-05-11 19:30:22 +00: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
review-check-tests.yml fix(ci): add jq install to review-check-tests workflow + fix /tmp/jq hardcode 2026-05-12 01:24:24 +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)(security): stop token appearing in curl argv (#541) 2026-05-11 19:30:22 +00:00
sop-checklist-gate.yml feat(ci): sop-checklist-gate — peer-ack merge gate (RFC#351 Phase 2) 2026-05-12 06:08:36 +00: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
status-reaper.yml fix(ci): status-reaper rev3 widens window 10->30 + raises watchdog timeout + re-enables both crons 2026-05-11 20:29:06 -07: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
weekly-platform-go.yml fix(ci): make go vet hard-failing in weekly-platform-go 2026-05-12 03:37:52 +00:00