ci: require manual live smoke scans for bundled MCP changes - #401
Conversation
ting-hong-shieh
left a comment
There was a problem hiding this comment.
Reviewed exact head 0ea332729a9bc12ba268ed98d381c1047c5e196b against current main 2f785900d2cefb932cf97fb1d675491d14790839. The focused workflow test passes with Bun 1.3.14 (12 passed, 42 expect() calls), the helper self-test passes, git diff --check passes, and the public check matrix is green.
I found one merge-gate lifecycle gap in the inline comment. The active main ruleset currently requires these contexts:
macos-latest / node-22
ubuntu-latest / node-22
windows-latest / node-22
It does not directly require codex-security/live-smoke-linux or codex-security/live-smoke-windows. The same-head transition is therefore:
first successful dispatch: live statuses succeed -> node-ci is refreshed -> protected Windows aggregate succeeds
later failed dispatch: live statuses fail -> refresh step is skipped -> protected Windows aggregate keeps its earlier success
I queried only the public GitHub ruleset and ran synthetic local workflow checks. I did not run a model-backed scan, call the OpenAI API, use credentials, or provide an external scan target.
| printf 'all-passed=%s\n' "$all_passed" >> "$GITHUB_OUTPUT" | ||
|
|
||
| - name: Refresh the pull request required CI gate | ||
| if: steps.report.outputs.all-passed == 'true' |
There was a problem hiding this comment.
Invalidate the protected gate after an unsuccessful rerun
After one successful dispatch for a head SHA, this step reruns node-ci and the required windows-latest / node-22 aggregate becomes successful. If a maintainer later dispatches the smoke workflow again for the same unchanged head and either platform fails, lines 349–365 replace the two live-smoke statuses with failure, but this step is skipped because all-passed is false. node-ci listens only to push and pull_request, and the active ruleset does not require the two live-smoke contexts directly, so nothing reevaluates the already-successful protected aggregate.
Please make pending or failed same-head runs invalidate the protected gate as well—for example, by refreshing the gate on every terminal result or by requiring the two exact-head status contexts directly—and add a success-to-failure lifecycle case to the test.
Summary
Require a maintainer-initiated, real package scan before pull requests can merge when they change the bundled MCP runtime.
Changes
Testing
bun test --randomize --seed 12345 --timeout 30000 ./tests-ts/live-scan-smoke-workflow.test.ts ./tests-ts/skeleton.test.ts ./tests-ts/release-cut-workflow.test.ts— 21 passed, 82 assertions.tsc --noEmitandtsc -p tsconfig.build.json— passed.node scripts/generate-models.cjs --check— passed.actionlint .github/workflows/node-ci.yml .github/workflows/live-scan-smoke.yml— passed.gitHeadand validated all 203 archive entries, the bundled plugin contract, and expected commit provenance.Risk and rollout
security-live-smokeenvironment and configure eitherOPENAI_IDENTITY_PROVIDER_ID,OPENAI_SERVICE_ACCOUNT_ID, andOPENAI_WIF_AUDIENCE, or its protectedCODEX_SECURITY_SMOKE_OPENAI_API_KEYsecret.gh workflow run live-scan-smoke.yml --repo openai/codex-security --ref main --field pull_request=PR_NUMBER.sdk/typescript/_bundled_plugin/mcp/do not require the manual scan. Existing Linux, macOS, and Windows CI coverage and protected check names are preserved.Public disclosure review