Files
molecule-core/.gitea/workflows/lint-env-coupling-dismissal.yml
T
hongming 9691192a58
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
Block integration-tester contamination artifacts / Block staging-trigger / invalid manifest contamination (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 7s
sop-checklist / all-items-acked (pull_request) ack advisory until agent-team — would be failure: acked: 0/9 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +6
sop-checklist / na-declarations (pull_request) N/A: (none)
sop-checklist / all-items-acked (pull_request_target) Successful in 5s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 9s
Concierge Creates Workspace Hermetic / Concierge Creates Workspace Hermetic (pull_request) Successful in 14s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 17s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 9s
lint-bp-context-emit-match / lint-bp-context-emit-match (pull_request) Successful in 20s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 9s
Lint forbidden hand-written mcp__ tool-id literals / Scan for hand-written mcp__ tool-id literals (pull_request) Successful in 8s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 25s
lint-no-coe-on-required / lint-no-coe-on-required (pull_request) Successful in 17s
Lint publish-runner timeout-minutes / Lint publish-runner timeout-minutes (pull_request) Successful in 15s
CI / Detect changes (pull_request) Successful in 41s
E2E API Smoke Test / detect-changes (pull_request) Successful in 45s
E2E Chat / detect-changes (pull_request) Successful in 45s
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Successful in 11s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 19s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 51s
lint-setup-go-cache / lint-setup-go-cache (pull_request) Successful in 20s
lint-staging-tenant-cd-gate-chain / lint-staging-tenant-cd-gate-chain (pull_request) Successful in 19s
Lint schedule budget / Zero-cron ratchet (pull_request) Successful in 22s
Secret scan / Scan diff for credential-shaped strings (pull_request) 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 22s
sop-checklist / review-refire (pull_request_target) Has been skipped
lint-env-coupling-dismissal / lint-env-coupling-dismissal (pull_request) Successful in 58s
gate-check-v3 / gate-check (pull_request_target) Successful in 14s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 3s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 6s
CI / Platform (Go) (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 3s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 4s
PR Diff Guard / PR diff guard (pull_request) Successful in 30s
CI / Canvas Deploy Status (pull_request) Successful in 2s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
E2E Chat / E2E Chat (pull_request) Successful in 5s
template-delivery-e2e / detect-changes (pull_request) Successful in 25s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 59s
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 3s
CI / all-required (pull_request) Successful in 5s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 58s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 38s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 33s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 33s
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
gitea-merge-queue / queue (pull_request_review) Successful in 9s
qa-review / approved (pull_request_review) Successful in 8s
reserved-path-review / reserved-path-review (pull_request_target) Approved via pull_request_review trigger
reserved-path-review / reserved-path-review (pull_request_review) Successful in 8s
security-review / approved (pull_request_target) Approved via pull_request_review trigger
security-review / approved (pull_request_review) Successful in 9s
ci-required-drift / drift (pull_request) Waiting to run
fix(ci): add bp-exempt directive to the env-coupling lint job (Tier 2g)
lint-required-context-exists-in-bp (internal#350) requires every NEW status
emission to carry a directive comment within 3 lines above its job key,
declaring bp-required vs bp-exempt. The env-coupling lint emits a new context
but is a standalone red-status governance job (enforced under the [*] all-green
gate, not an enumerated BP context), so it is bp-exempt. Detection verified
locally: find_directive_for_job(...) -> ('exempt', None).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 00:39:55 -07:00

75 lines
2.9 KiB
YAML

name: lint-env-coupling-dismissal
# No-flaky / env-coupling governance lint (task#233; SOP
# docs/engineering/testing-strategy.md §"No flaky, no environmental").
#
# Two mechanical checks over the PR's changed files:
# 1. A COE/incident/postmortem markdown doc may not dismiss a red as
# "flaky"/"environmental" without naming a deterministic root cause.
# 2. A changed e2e file may not introduce a fixed sleep/setTimeout/time.Sleep
# as a readiness wait without a real-signal poll (class-E coupling).
# Escape hatch for a genuine wait / correctly-labelled retro: an inline
# `lint-allow: env-coupling` marker.
#
# This is a standalone red-status lint (bp-exempt): it is NOT itself an
# enumerated branch-protection required context, so it never freezes the merge
# queue looking for a phantom emitter — but under the core/main [*] all-green
# wildcard gate a red here blocks merge, and the paired sop-checklist item
# `no-flaky-env-coupling` carries the human/agent review half.
#
# No API token needed: the scanners run on the git diff only.
on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches: [main, staging]
workflow_dispatch:
permissions:
contents: read
concurrency:
group: lint-env-coupling-dismissal-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# This job is a standalone red-status governance lint, enforced under the
# core/main [*] all-green wildcard gate. It is NOT an enumerated branch-
# protection required context, so it never freezes the merge queue looking
# for a phantom emitter; the review half rides the paired sop-checklist item
# `no-flaky-env-coupling`.
# bp-exempt: no-flaky/env-coupling governance lint, not a gate context.
lint:
name: lint-env-coupling-dismissal
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: '3.12'
- name: Resolve diff base
env:
BASE_BRANCH: ${{ github.base_ref }}
run: |
set -uo pipefail
if [ -n "${BASE_BRANCH:-}" ]; then
# pull_request: diff the PR head against its target branch.
git fetch --quiet origin "$BASE_BRANCH" || true
echo "BASE_REF=origin/$BASE_BRANCH" >> "$GITHUB_ENV"
else
# push: diff against the previous commit on this ref.
echo "BASE_REF=HEAD~1" >> "$GITHUB_ENV"
fi
- name: Run lint-env-coupling-dismissal
env:
BASE_REF: ${{ env.BASE_REF }}
run: python3 .gitea/scripts/lint_env_coupling_dismissal.py
- name: Run unit tests
run: |
python -m pip install --quiet pytest
python3 -m pytest tests/test_lint_env_coupling_dismissal.py -q