ci: harden the structured ci-gate workflow stack#4083
Conversation
Siri-Ray
left a comment
There was a problem hiding this comment.
Thanks for pushing this CI gate hardening through, @PerishCode. I reviewed the changed workflow stack, the shell action wrappers, and the TypeScript aggregator, and also smoke-tested the aggregator locally against the successful runner/hosted validation pair. I found one merge-safe robustness regression around preserving structured results when a command hangs.
🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.Generated-By: looper 0.9.5 (runner=fixer, agent=codex)
|
Looper fixer round complete — 2be21d7
🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos. |
Siri-Ray
left a comment
There was a problem hiding this comment.
@PerishCode I reviewed the updated ci-gate workflow stack on the current head, including the new runner/hosted workflow wiring, the shell action wrappers, the step timeout restoration in ci/lib.sh, and the TypeScript result aggregator. I also checked the prior timeout feedback against this head, ran shell syntax validation, git diff --check, inspected the live workflow check failure log, and did a local stubbed smoke test that confirmed ci-gate.sh emits the structured result file plus OD_CI_RESULTS_JSON marker. I did not find any actionable correctness issues in the changed ranges; thanks for tightening up the CI gate transport and fallback path.
Generated-By: looper 0.9.5 (runner=fixer, agent=codex)
Siri-Ray
left a comment
There was a problem hiding this comment.
@PerishCode I reviewed the current ci-gate hardening head, including the new actionlint install path, the runner/hosted workflow wiring, the structured result script, per-action shell wrappers, timeout handling, artifact/log fallback parsing, and aggregation behavior. I also checked the prior timeout feedback against this head and ran local shell syntax plus diff whitespace validation. I did not find any actionable correctness issues in the changed ranges; thanks for continuing to tighten this CI gate path.
🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.Generated-By: looper 0.9.5 (runner=fixer, agent=codex)
Siri-Ray
left a comment
There was a problem hiding this comment.
@PerishCode I reviewed the current ci-gate hardening head, including the pull request target SHA alignment, runner/hosted workflow wiring, structured result generation, per-action shell wrappers, timeout handling, artifact/log fallback parsing, and the TypeScript aggregation path. I also checked the prior timeout feedback against this head, ran local shell syntax validation, node --check for the aggregator, git diff --check, and inspected the live check state; I did not find any actionable correctness issues in the changed ranges. Thanks for continuing to harden this CI gate path and for keeping the fallback behavior verifiable.
Why
I needed to turn the new
ci-gatestack into something the repository can actually trust as the future PR check entrypoint, instead of leaving it at design-only status. The immediate pain here was that the newci-*workflows still needed real proof that they could absorb the old gate semantics, survive self-hosted runner transport issues, and support the intended hosted fallback path before we can switch repository rules over.This PR hardens that new stack so the CI gate itself is no longer the risky part of the migration. It gives us a structured result contract, a thin aggregator, verified fallback behavior, and enough runtime timing detail to understand hotspots later without coupling gate correctness to workflow logs.
What users will see
There is no end-user product surface change. For maintainers and contributors, the repository gains a new
ci-gateworkflow stack that can serve as the future PR check entrypoint, with a self-hosted default path, a hostednix|fullpath, structured aggregation, and a verified hosted fallback flow.Surface area
apps/weborapps/desktop(including Electron menu bar)odsubcommand or flag, newtools-dev/tools-pack/tools-prflag, or newOD_*env var/api/*endpoint, new SSE event, or changed shape inpackages/contractsskills/,design-systems/,design-templates/, orcraft/, or change to the skills protocolTRANSLATIONS.mdfor the locale workflow)package.json(dependenciesordevDependencies); workspace-packagepackage.jsonfiles are out of scope. Include a paragraph on what we get vs. what bytes we ship (seeCONTRIBUTING.md→ Code style)Screenshots
N/A
Bug fix verification
Validation
bash -n .github/workflows/scripts/ci-gate.sh .github/workflows/scripts/ci/lib.sh .github/workflows/scripts/ci/actions/*.shgit diff --checkcodex/ci-gate-hardening:ci-runner27261360550verified structured-log fallback behavior when self-hosted artifact upload hitECONNRESETci-hosted mode=nix27261360728verified the default hosted nix lane and structured result artifactci-gate27261371310verified action-level aggregation and runner log fallbackci-hosted mode=full27262247348verified hosted full fallback on the current headci-gate27263628637verified explicit fallback aggregation with failed runner + successful hosted fullci-gate27263701318verified workflow_dispatch run-id inference without explicittarget_sha/target_eventci-hosted mode=nix27266573824verified timing-enabled structured results with per-stepsteps[]ci-runner27267280361andci-hosted mode=full27267280362verified comparative timing output across runner and hosted