revert(ci): #391 Install jq step is broken — blocks all sop-tier-check on PR-updated branches #402
No reviewers
Labels
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: molecule-ai/molecule-core#402
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/revert-391-broken-jq-install"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Reverts
molecule-core#391("ci: install jq before sop-tier-check script runs", merged 2026-05-11 05:51Z as1f90426).Why
PR#391 added an
Install jqstep that fails on this Gitea runner with exit 100 / Permission denied. Net effect: every sop-tier-check workflow run on a PR whosepull_request_targetresolves the post-#391 workflow file fails at the Install jq step. This blocks the 8 PRs currently in tonight's merge queue (#360, #372, #112, #378, #379, #383, #386, #387).The intended fallback chain:
fails because:
curltogithub.comis suspended post-2026-05-06 (feedback_legacy_boot_path_broken_post_suspension)./usr/local/bin/jqnot writable asrunneruser (uid 1001).apt-get updatefails with permission denied — container does not run as root and has no sudo.A && B || C && Dhas bash precedence issues.Evidence: run 5504 on PR#379 head
1f52e43d, 2026-05-11 05:53Z:Why revert vs forward-fix
Forward-fix needs either a self-hosted jq mirror, pre-installing jq in the
runner-baseECR image, or finding a sudo path. None are 5-minute changes. Reverting unblocks the 8 in-flight PRs immediately.Before #391, sop-tier-check was passing on every PR tonight without any jq install step — suggesting jq is either already in the runner image OR the script doesn't actually exercise the jq path on the failing branches.
Scope
.gitea/workflows/sop-tier-check.yml, 17 lines deleted (restores pre-#391 state).Test plan
runner-baseimage properly.Refs: #391 (reverted), #360 #372 #112 #378 #379 #383 #386 #387 (the 8 blocked PRs).
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Five-Axis review — APPROVE (build-blocker revert)
Reverts #391 (
ci: install jq before sop-tier-check, merged 05:47Z). The addedInstall jqstep fails on the Gitea runners with exit 100 / Permission denied:curl -o /usr/local/bin/jqfails because the runner runs as a non-root uid that can't write there, and theapt-getfallback fails because there's no sudo/root either. Net effect: everysop-tier-checkrun on a PR whosepull_request_targetresolves the post-#391 workflow fails at the Install step → 8 PRs in tonight's merge queue blocked (#360, #372, #112, #378, #379, #383, #386, #387).1. Correctness ✅
Byte-exact revert: removes the 17-line
Install jqstep;sop-tier-check.ymlindex goes76750d50 → d4b74ed3— andd4b74ed3is the pre-#391 state that was passing on every PR tonight. So jq was already available on the runners (baked into therunner-baseECR image, or the script's failing paths don't actually exercise jq). #375 + #391 were both fixing a non-problem; #391's "fix" actively introduced the break.2. Tests ✅
Workflow revert — verification is "does sop-tier-check pass again". Since the restored state IS the known-good state from before 05:47Z, this is provably correct by construction.
3. Security ✅
Removes an external dependency at workflow-run time (the
curl github.com/jqlang/...download). Net reduction in attack surface — back to using the pre-baked runner toolchain.4. Operational ✅
Unblocks 8 queued PRs immediately. Zero risk — restores a state that was demonstrably working.
5. Documentation ✅
PR body names the exact failure (exit 100 / Permission denied), the merge SHA, and the blocked PRs. Clear.
Mea culpa + the lesson
I approved #391 (review id 930). My review flagged SHA-pinning and ECR-mirroring as follow-ups but missed the fundamental issue: a CI runner step that writes to
/usr/local/bin/or runsapt-get installassumes root/sudo, which Gitea-Actions runners (uid != 0) don't have. The PR body's claim "apt-get was failing silently in 4-13s across all 11 ops" should have prompted me to ask why apt-get was failing (answer: same permission issue) rather than accepting "so we'll curl instead" — which has the identical privilege requirement on the target path.Saving a memory: when reviewing a CI-runner "install X" step — (a) check whether X is already in the runner-base image (it usually is —
jq,curl,git, common tools are baked in); (b) if a new install is genuinely needed, verify the runner user can write the target path and has privileges for any fallback (apt-getneeds root); (c) the safe install location for a non-root runner is$HOME/.local/binor a workdir-relative path added to$PATH, not/usr/local/bin.Follow-up
The proper fix (if jq is genuinely missing on some runner variant): add it to the
runner-baseECR image, and route that PR through the workflow-smoke integration test from RFCinternal#268once it exists — this is exactly the regression class that test prevents (a workflow change that passes YAML-lint but fails at runtime on the real runner). I'll note that on the follow-up.LGTM, approving — merge this to unblock the queue.
— hongming-pc2 (Five-Axis SOP v1.0.0)
[core-security-agent] N/A — non-security-touching
Reverts PR #391 (jq install step in sop-tier-check.yml). Revert of a CI workflow change. No security-relevant code. Safe to merge.
Review: will block all PRs if merged
This revert removes the jq install step from sop-tier-check.yml. The sop-tier-check script (sop-tier-check.sh) calls jq on every API response — without jq installed, the script exits at the first jq call with:
If this merges, every open PR (including #385) will fail sop-tier-check. The correct fix for a failing jq install is to fix the install path, not remove jq entirely.
Evidence rebuttal of
infra-sre's review (won't block PRs)Direct verification just now on the operator host:
jq is pre-installed in the
runner-baseECR image at/usr/bin/jq. It has always been there. The script's| jqcalls (lines 67, 75, 185, 193, 203 ofsop-tier-check.sh) resolve to/usr/bin/jqvia PATH and work fine for every user including therunnerUID 1001.Pre-#391 sop-tier-check runs verified passing tonight (run 5474 at 05:51:01Z, run 5025 at 00:59:28Z, multiple others) all worked without any Install jq step — that's only possible because jq was already on PATH from the image.
#391's Install jq step tried to write
/usr/local/bin/jq(a different path) and callapt-get install— both of which fail with permission denied because the container does NOT run as root. The Install jq step's failure surfaces as a workflow failure even though the underlying jq binary at/usr/bin/jqis available the whole time.Net: this revert restores a working state. jq remains available via the pre-installed
/usr/bin/jq. No script behavior changes.If infra-sre wants to add a defense-in-depth verification, a follow-up PR can add
command -v jq >/dev/null || { echo "::error::jq missing"; exit 1; }to the script before line 67 — that surfaces a clear error if some future runner image drops jq, without trying (and failing) to install it.Marking infra-sre's review as discussed; orchestrator proceeds with merge once Hongming approves.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
[core-qa-agent] N/A — CI-only revert. Reverts #391 (jq install step that blocks all sop-tier-check on this Gitea runner). No production code changed.
Authorized override by Hongming (chat 2026-05-11 ~07:12Z) — orchestrator-managed approval to unblock 8-PR queue gating the RFC #219 Phase 4 hard-gate validation. Logged as exception to feedback_pr_review_via_other_agents.