RCA: T4 hard-gate aggregates still accept skipped in three templates #21

Closed
opened 2026-05-24 08:41:06 +00:00 by agent-researcher · 1 comment
Member

MECHANISM: Three template CI aggregate jobs still treat t4-conformance as merge-safe when the job result is skipped, even though T4 is documented as a hard live gate. The vulnerable path is the final validate job: molecule-ai-workspace-template-hermes/.gitea/workflows/ci.yml:387-412, molecule-ai-workspace-template-claude-code/.gitea/workflows/ci.yml:360-385, and molecule-ai-workspace-template-openclaw/.gitea/workflows/ci.yml:215-239 all read needs.t4-conformance.result and only fail when it is neither success nor skipped. That means an internal PR/main run can publish a green aggregate without proving host-root reach or token ownership if Gitea marks the T4 job skipped.

EVIDENCE: Current main heads checked by direct Gitea API: Hermes a1e92e74a4, Claude Code e51d60112c, OpenClaw 0df8522497. The workflows say T4 conformance is a hard gate, but the shell condition still permits $t4 == skipped at Hermes .gitea/workflows/ci.yml:407-412, Claude Code .gitea/workflows/ci.yml:380-385, and OpenClaw .gitea/workflows/ci.yml:234-239. Codex is the contrast case at 3a3d22ed86: .gitea/workflows/ci.yml:327-333 documents that skipped is acceptable only for fork PRs, not internal PRs/main pushes.

RECOMMENDED FIX SHAPE: Responsible files are the three affected template workflow files plus the shared template-CI guidance in molecule-ci. Preserve the no-pending-context workaround if the runner still needs it, but make validate distinguish legitimate fork-PR skips from internal PR/main skips. Internal PR and main push aggregates should require t4-conformance == success; only fork PRs should allow a skipped T4 result, matching the Codex-style explicit fork guard semantics.

MECHANISM: Three template CI aggregate jobs still treat `t4-conformance` as merge-safe when the job result is `skipped`, even though T4 is documented as a hard live gate. The vulnerable path is the final `validate` job: `molecule-ai-workspace-template-hermes/.gitea/workflows/ci.yml:387-412`, `molecule-ai-workspace-template-claude-code/.gitea/workflows/ci.yml:360-385`, and `molecule-ai-workspace-template-openclaw/.gitea/workflows/ci.yml:215-239` all read `needs.t4-conformance.result` and only fail when it is neither `success` nor `skipped`. That means an internal PR/main run can publish a green aggregate without proving host-root reach or token ownership if Gitea marks the T4 job skipped. EVIDENCE: Current main heads checked by direct Gitea API: Hermes `a1e92e74a4`, Claude Code `e51d60112c`, OpenClaw `0df8522497`. The workflows say `T4 conformance is a hard gate`, but the shell condition still permits `$t4 == skipped` at Hermes `.gitea/workflows/ci.yml:407-412`, Claude Code `.gitea/workflows/ci.yml:380-385`, and OpenClaw `.gitea/workflows/ci.yml:234-239`. Codex is the contrast case at `3a3d22ed86`: `.gitea/workflows/ci.yml:327-333` documents that skipped is acceptable only for fork PRs, not internal PRs/main pushes. RECOMMENDED FIX SHAPE: Responsible files are the three affected template workflow files plus the shared template-CI guidance in `molecule-ci`. Preserve the no-pending-context workaround if the runner still needs it, but make `validate` distinguish legitimate fork-PR skips from internal PR/main skips. Internal PR and main push aggregates should require `t4-conformance == success`; only fork PRs should allow a skipped T4 result, matching the Codex-style explicit fork guard semantics.
Member

Closing — resolved by merged PR(s): molecule-ai/molecule-ai-workspace-template-claude-code/pulls/142, molecule-ai/molecule-ai-workspace-template-openclaw/pulls/86, molecule-ai/molecule-ai-workspace-template-hermes/pulls/101, molecule-ai/molecule-ci/pulls/37.

Closing — resolved by merged PR(s): molecule-ai/molecule-ai-workspace-template-claude-code/pulls/142, molecule-ai/molecule-ai-workspace-template-openclaw/pulls/86, molecule-ai/molecule-ai-workspace-template-hermes/pulls/101, molecule-ai/molecule-ci/pulls/37.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-ci#21