[ci-drift] molecule-ai/molecule-core/main: required-checks divergence detected #1207

Closed
opened 2026-05-15 15:18:03 +00:00 by mc-drift-bot · 0 comments
Owner

Drift detected on molecule-ai/molecule-core/main

Auto-filed by .gitea/workflows/ci-required-drift.yml (RFC internal#219 §4 + §6).

Findings

F3b — branch_protections/main.status_check_contexts has contexts NOT in audit-force-merge.yml REQUIRED_CHECKS env (real force-merges would be missed):

  • E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request)
  • Secret scan / Scan diff for credential-shaped strings (pull_request)
  • template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request)

Resolution

  • F1 / F1b: if the sentinel job has a needs: block, add the missing job to it in .gitea/workflows/ci.yml, or remove the stale entry. If the sentinel deliberately has no needs: (path-aware polling sentinel per post-#1766 contract), this finding is expected and F1 is skipped.
  • F2: rename the protection context to match an emitter, or remove it from status_check_contexts (PATCH /api/v1/repos/{owner}/{repo}/branch_protections/{branch}).
  • F3a / F3b: bring REQUIRED_CHECKS_JSON (or REQUIRED_CHECKS legacy) env in .gitea/workflows/audit-force-merge.yml into set-equality with status_check_contexts (single PR, both files).

Debug

{
  "audit_env_checks": [
    "CI / all-required (pull_request)",
    "E2E API Smoke Test / E2E API Smoke Test (pull_request)",
    "Handlers Postgres Integration / Handlers Postgres Integration (pull_request)"
  ],
  "branch": "main",
  "ci_jobs": [
    "canvas-build",
    "canvas-deploy-status",
    "changes",
    "platform-build",
    "python-lint",
    "shellcheck"
  ],
  "expected_contexts": [
    "ci / all-required (pull_request)",
    "ci / canvas-build (pull_request)",
    "ci / canvas-deploy-status (pull_request)",
    "ci / changes (pull_request)",
    "ci / platform-build (pull_request)",
    "ci / python-lint (pull_request)",
    "ci / shellcheck (pull_request)"
  ],
  "protection_contexts": [
    "CI / all-required (pull_request)",
    "E2E API Smoke Test / E2E API Smoke Test (pull_request)",
    "E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request)",
    "Handlers Postgres Integration / Handlers Postgres Integration (pull_request)",
    "Secret scan / Scan diff for credential-shaped strings (pull_request)",
    "template-delivery-e2e / Template-asset delivery (fresh seo-agent \u2014 config+prompts via asset channel, seo-all via plugin reconcile) (pull_request)"
  ],
  "repo_emitted_contexts": [
    "Block internal-flavored paths / Block forbidden paths (pull_request)",
    "CI / Canvas (Next.js) (pull_request)",
    "CI / Canvas Deploy Status (pull_request)",
    "CI / Detect changes (pull_request)",
    "CI / Platform (Go) (pull_request)",
    "CI / Python Lint & Test (pull_request)",
    "CI / Shellcheck (E2E scripts) (pull_request)",
    "CI / all-required (pull_request)",
    "Check migration collisions / Migration version collision check (pull_request)",
    "Continuous synthetic E2E (staging) / Synthetic E2E against staging (pull_request)",
    "E2E API Smoke Test / E2E API Smoke Test (pull_request)",
    "E2E API Smoke Test / detect-changes (pull_request)",
    "E2E Chat / E2E Chat (pull_request)",
    "E2E Chat / detect-changes (pull_request)",
    "E2E Legacy Advisory / Legacy local-platform E2E (pull_request)",
    "E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request)",
    "E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request)",
    "E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request)",
    "E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request)",
    "E2E Staging Canvas (Playwright) / detect-changes (pull_request)",
    "E2E Staging External Runtime / E2E Staging External Runtime (pull_request)",
    "E2E Staging Reconciler (heals terminated EC2) / E2E Staging Reconciler (pull_request)",
    "E2E Staging Reconciler (heals terminated EC2) / pr-validate (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request)",
    "E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request)",
    "E2E Staging SaaS (full lifecycle) / pr-validate (pull_request)",
    "E2E Staging Sanity (leak-detection self-check) / Intentional-failure teardown sanity (pull_request)",
    "E2E Workspace Lifecycle (staginge2e) / E2E Workspace Lifecycle (compile+skip) (pull_request)",
    "E2E Workspace Lifecycle (staginge2e) / E2E Workspace Lifecycle (staging) (pull_request)",
    "Handlers Postgres Integration / Handlers Postgres Integration (pull_request)",
    "Handlers Postgres Integration / detect-changes (pull_request)",
    "Harness Replays / Harness Replays (pull_request)",
    "Harness Replays / detect-changes (pull_request)",
    "Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request)",
    "Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request)",
    "Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request)",
    "Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request)",
    "Lint publish-runner timeout-minutes / Lint publish-runner timeout-minutes (pull_request)",
    "Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request)",
    "Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request)",
    "Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request)",
    "Ops Scripts Tests / Ops scripts (unittest) (pull_request)",
    "PR Diff Guard / PR diff guard (pull_request)",
    "Railway pin audit (drift detection) / Audit Railway env vars for drift-prone pins (pull_request)",
    "SECRET_PATTERNS drift lint / Detect SECRET_PATTERNS drift (pull_request)",
    "Secret scan / Scan diff for credential-shaped strings (pull_request)",
    "Staging SaaS smoke (every 30 min) / Staging SaaS smoke (pull_request)",
    "Staging verify / promote-to-latest (pull_request)",
    "Staging verify / staging-smoke (pull_request)",
    "Sweep stale AWS Secrets Manager secrets / Sweep AWS Secrets Manager (pull_request)",
    "Sweep stale Cloudflare DNS records / Sweep CF orphans (pull_request)",
    "Sweep stale Cloudflare Tunnels / Sweep CF tunnels (pull_request)",
    "Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (pull_request)",
    "Sweep stale ws-* workspace orphans (runner host) / Sweep ws-* orphans (pull_request)",
    "Weekly Platform-Go Surface / Weekly Platform-Go Surface (pull_request)",
    "audit-force-merge / audit (pull_request)",
    "boot-to-registration-e2e (advisory) / Minimal cell (claude-code + platform + moonshot/kimi-k2.6) (pull_request)",
    "ci-required-drift / drift (pull_request)",
    "gate-check-v3 / gate-check (pull_request)",
    "gate-check-v3-tests / gate-check-v3 unit tests (pull_request)",
    "gitea-merge-queue / queue (pull_request)",
    "lint-bp-context-emit-match / lint-bp-context-emit-match (pull_request)",
    "lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request)",
    "lint-mask-pr-atomicity / lint-mask-pr-atomicity (pull_request)",
    "lint-no-coe-on-required / lint-no-coe-on-required (pull_request)",
    "lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request)",
    "lint-required-no-paths / lint-required-no-paths (pull_request)",
    "lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request)",
    "lint-setup-go-cache / lint-setup-go-cache (pull_request)",
    "main-red-watchdog / watchdog (pull_request)",
    "publish-canvas-image / Build & push canvas image (pull_request)",
    "publish-canvas-image / Promote canvas :latest to CI-green build (pull_request)",
    "publish-workspace-server-image / Production auto-deploy (pull_request)",
    "publish-workspace-server-image / Staging auto-deploy (pull_request)",
    "publish-workspace-server-image / build-and-push (pull_request)",
    "qa-review / approved (pull_request)",
    "redeploy-tenants-on-main / redeploy (pull_request)",
    "redeploy-tenants-on-staging / redeploy (pull_request)",
    "reserved-path-review / reserved-path-review (pull_request)",
    "review-check-tests / review-check.sh regression tests (pull_request)",
    "review-refire-comments / dispatch (pull_request)",
    "security-review / approved (pull_request)",
    "sop-checklist / all-items-acked (pull_request)",
    "sop-checklist / review-refire (pull_request)",
    "status-reaper / reap (pull_request)",
    "sync-providers-yaml / Compare synced providers.yaml against controlplane canonical (pull_request)",
    "template-delivery-e2e / Template-asset delivery (fresh seo-agent \u2014 config+prompts via asset channel, seo-all via plugin reconcile) (pull_request)",
    "template-delivery-e2e / detect-changes (pull_request)",
    "umbrella-reaper / reap (pull_request)",
    "verify-providers-gen / Regenerate providers artifact and fail on drift (pull_request)"
  ],
  "sentinel_needs": [
    "canvas-build",
    "canvas-deploy-status",
    "changes",
    "platform-build",
    "python-lint",
    "shellcheck"
  ]
}

This issue is idempotent: drift-detect runs hourly at :17 and edits this body in place. Close the issue once the drift is fixed; the next hourly run will reopen if drift returns.

# Drift detected on `molecule-ai/molecule-core/main` Auto-filed by `.gitea/workflows/ci-required-drift.yml` (RFC [internal#219](https://git.moleculesai.app/molecule-ai/internal/issues/219) §4 + §6). ## Findings F3b — branch_protections/main.status_check_contexts has contexts NOT in audit-force-merge.yml `REQUIRED_CHECKS` env (real force-merges would be missed): - E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) - Secret scan / Scan diff for credential-shaped strings (pull_request) - template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) ## Resolution - **F1 / F1b**: if the sentinel job has a `needs:` block, add the missing job to it in `.gitea/workflows/ci.yml`, or remove the stale entry. If the sentinel deliberately has no `needs:` (path-aware polling sentinel per post-#1766 contract), this finding is expected and F1 is skipped. - **F2**: rename the protection context to match an emitter, or remove it from `status_check_contexts` (PATCH `/api/v1/repos/{owner}/{repo}/branch_protections/{branch}`). - **F3a / F3b**: bring `REQUIRED_CHECKS_JSON` (or `REQUIRED_CHECKS` legacy) env in `.gitea/workflows/audit-force-merge.yml` into set-equality with `status_check_contexts` (single PR, both files). ## Debug ```json { "audit_env_checks": [ "CI / all-required (pull_request)", "E2E API Smoke Test / E2E API Smoke Test (pull_request)", "Handlers Postgres Integration / Handlers Postgres Integration (pull_request)" ], "branch": "main", "ci_jobs": [ "canvas-build", "canvas-deploy-status", "changes", "platform-build", "python-lint", "shellcheck" ], "expected_contexts": [ "ci / all-required (pull_request)", "ci / canvas-build (pull_request)", "ci / canvas-deploy-status (pull_request)", "ci / changes (pull_request)", "ci / platform-build (pull_request)", "ci / python-lint (pull_request)", "ci / shellcheck (pull_request)" ], "protection_contexts": [ "CI / all-required (pull_request)", "E2E API Smoke Test / E2E API Smoke Test (pull_request)", "E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request)", "Handlers Postgres Integration / Handlers Postgres Integration (pull_request)", "Secret scan / Scan diff for credential-shaped strings (pull_request)", "template-delivery-e2e / Template-asset delivery (fresh seo-agent \u2014 config+prompts via asset channel, seo-all via plugin reconcile) (pull_request)" ], "repo_emitted_contexts": [ "Block internal-flavored paths / Block forbidden paths (pull_request)", "CI / Canvas (Next.js) (pull_request)", "CI / Canvas Deploy Status (pull_request)", "CI / Detect changes (pull_request)", "CI / Platform (Go) (pull_request)", "CI / Python Lint & Test (pull_request)", "CI / Shellcheck (E2E scripts) (pull_request)", "CI / all-required (pull_request)", "Check migration collisions / Migration version collision check (pull_request)", "Continuous synthetic E2E (staging) / Synthetic E2E against staging (pull_request)", "E2E API Smoke Test / E2E API Smoke Test (pull_request)", "E2E API Smoke Test / detect-changes (pull_request)", "E2E Chat / E2E Chat (pull_request)", "E2E Chat / detect-changes (pull_request)", "E2E Legacy Advisory / Legacy local-platform E2E (pull_request)", "E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request)", "E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request)", "E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request)", "E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request)", "E2E Staging Canvas (Playwright) / detect-changes (pull_request)", "E2E Staging External Runtime / E2E Staging External Runtime (pull_request)", "E2E Staging Reconciler (heals terminated EC2) / E2E Staging Reconciler (pull_request)", "E2E Staging Reconciler (heals terminated EC2) / pr-validate (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request)", "E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request)", "E2E Staging SaaS (full lifecycle) / pr-validate (pull_request)", "E2E Staging Sanity (leak-detection self-check) / Intentional-failure teardown sanity (pull_request)", "E2E Workspace Lifecycle (staginge2e) / E2E Workspace Lifecycle (compile+skip) (pull_request)", "E2E Workspace Lifecycle (staginge2e) / E2E Workspace Lifecycle (staging) (pull_request)", "Handlers Postgres Integration / Handlers Postgres Integration (pull_request)", "Handlers Postgres Integration / detect-changes (pull_request)", "Harness Replays / Harness Replays (pull_request)", "Harness Replays / detect-changes (pull_request)", "Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request)", "Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request)", "Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request)", "Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request)", "Lint publish-runner timeout-minutes / Lint publish-runner timeout-minutes (pull_request)", "Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request)", "Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request)", "Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request)", "Ops Scripts Tests / Ops scripts (unittest) (pull_request)", "PR Diff Guard / PR diff guard (pull_request)", "Railway pin audit (drift detection) / Audit Railway env vars for drift-prone pins (pull_request)", "SECRET_PATTERNS drift lint / Detect SECRET_PATTERNS drift (pull_request)", "Secret scan / Scan diff for credential-shaped strings (pull_request)", "Staging SaaS smoke (every 30 min) / Staging SaaS smoke (pull_request)", "Staging verify / promote-to-latest (pull_request)", "Staging verify / staging-smoke (pull_request)", "Sweep stale AWS Secrets Manager secrets / Sweep AWS Secrets Manager (pull_request)", "Sweep stale Cloudflare DNS records / Sweep CF orphans (pull_request)", "Sweep stale Cloudflare Tunnels / Sweep CF tunnels (pull_request)", "Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (pull_request)", "Sweep stale ws-* workspace orphans (runner host) / Sweep ws-* orphans (pull_request)", "Weekly Platform-Go Surface / Weekly Platform-Go Surface (pull_request)", "audit-force-merge / audit (pull_request)", "boot-to-registration-e2e (advisory) / Minimal cell (claude-code + platform + moonshot/kimi-k2.6) (pull_request)", "ci-required-drift / drift (pull_request)", "gate-check-v3 / gate-check (pull_request)", "gate-check-v3-tests / gate-check-v3 unit tests (pull_request)", "gitea-merge-queue / queue (pull_request)", "lint-bp-context-emit-match / lint-bp-context-emit-match (pull_request)", "lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request)", "lint-mask-pr-atomicity / lint-mask-pr-atomicity (pull_request)", "lint-no-coe-on-required / lint-no-coe-on-required (pull_request)", "lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request)", "lint-required-no-paths / lint-required-no-paths (pull_request)", "lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request)", "lint-setup-go-cache / lint-setup-go-cache (pull_request)", "main-red-watchdog / watchdog (pull_request)", "publish-canvas-image / Build & push canvas image (pull_request)", "publish-canvas-image / Promote canvas :latest to CI-green build (pull_request)", "publish-workspace-server-image / Production auto-deploy (pull_request)", "publish-workspace-server-image / Staging auto-deploy (pull_request)", "publish-workspace-server-image / build-and-push (pull_request)", "qa-review / approved (pull_request)", "redeploy-tenants-on-main / redeploy (pull_request)", "redeploy-tenants-on-staging / redeploy (pull_request)", "reserved-path-review / reserved-path-review (pull_request)", "review-check-tests / review-check.sh regression tests (pull_request)", "review-refire-comments / dispatch (pull_request)", "security-review / approved (pull_request)", "sop-checklist / all-items-acked (pull_request)", "sop-checklist / review-refire (pull_request)", "status-reaper / reap (pull_request)", "sync-providers-yaml / Compare synced providers.yaml against controlplane canonical (pull_request)", "template-delivery-e2e / Template-asset delivery (fresh seo-agent \u2014 config+prompts via asset channel, seo-all via plugin reconcile) (pull_request)", "template-delivery-e2e / detect-changes (pull_request)", "umbrella-reaper / reap (pull_request)", "verify-providers-gen / Regenerate providers artifact and fail on drift (pull_request)" ], "sentinel_needs": [ "canvas-build", "canvas-deploy-status", "changes", "platform-build", "python-lint", "shellcheck" ] } ``` _This issue is idempotent: drift-detect runs hourly at `:17` and edits this body in place. Close the issue once the drift is fixed; the next hourly run will reopen if drift returns._
mc-drift-bot added the tier:high label 2026-05-15 15:18:03 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#1207