4444 - uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
4545 with :
4646 fetch-depth : 0
47+ persist-credentials : false
4748 - uses : actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
4849 with :
4950 python-version : ${{ matrix.python-version }}
51+ - name : Harden ephemeral Linux runner home chain
52+ if : runner.os == 'Linux'
53+ shell : bash
54+ run : |
55+ set -euo pipefail
56+ mapfile -d '' -t account_home_chain < <(python -I -S -B -c 'import os, pathlib, pwd; home = pathlib.Path(pwd.getpwuid(os.geteuid()).pw_dir); current = pathlib.Path(home.anchor); chain = [current]; [(chain.append(current := current / component)) for component in home.parts[1:]]; print(*(str(path) for path in chain), sep="\0", end="\0")')
57+ sudo setfacl --remove-all --remove-default -- "${account_home_chain[@]}"
58+ sudo chmod go-w -- "${account_home_chain[@]}"
5059 - name : Run the short dependency-free gate
5160 run : make check-fast
5261 - name : Run dependency-free unit contracts
7281 - uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
7382 with :
7483 fetch-depth : 0
84+ persist-credentials : false
7585 - uses : actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
7686 with :
7787 python-version : ${{ matrix.python-version }}
88+ - name : Harden ephemeral Linux runner home chain
89+ if : runner.os == 'Linux'
90+ shell : bash
91+ run : |
92+ set -euo pipefail
93+ mapfile -d '' -t account_home_chain < <(python -I -S -B -c 'import os, pathlib, pwd; home = pathlib.Path(pwd.getpwuid(os.geteuid()).pw_dir); current = pathlib.Path(home.anchor); chain = [current]; [(chain.append(current := current / component)) for component in home.parts[1:]]; print(*(str(path) for path in chain), sep="\0", end="\0")')
94+ sudo setfacl --remove-all --remove-default -- "${account_home_chain[@]}"
95+ sudo chmod go-w -- "${account_home_chain[@]}"
7896 - name : Run Goal and Apply behavior gates
7997 run : make check-behavior
8098
@@ -85,9 +103,18 @@ jobs:
85103 - uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
86104 with :
87105 fetch-depth : 0
106+ persist-credentials : false
88107 - uses : actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
89108 with :
90109 python-version : " 3.13"
110+ - name : Harden ephemeral Linux runner home chain
111+ if : runner.os == 'Linux'
112+ shell : bash
113+ run : |
114+ set -euo pipefail
115+ mapfile -d '' -t account_home_chain < <(python -I -S -B -c 'import os, pathlib, pwd; home = pathlib.Path(pwd.getpwuid(os.geteuid()).pw_dir); current = pathlib.Path(home.anchor); chain = [current]; [(chain.append(current := current / component)) for component in home.parts[1:]]; print(*(str(path) for path in chain), sep="\0", end="\0")')
116+ sudo setfacl --remove-all --remove-default -- "${account_home_chain[@]}"
117+ sudo chmod go-w -- "${account_home_chain[@]}"
91118 - name : Run package contract and extraction gates
92119 run : make check-package
93120 - name : Run public release privacy validation
@@ -129,10 +156,13 @@ jobs:
129156 test -f "$tmpdir/plugin/.codex-plugin/plugin.json"
130157 test ! -e "$tmpdir/plugin/tests"
131158 test ! -e "$tmpdir/source/CodexQB/.git"
132- cd "$tmpdir/source/CodexQB"
133- CODEXQB_VALIDATE_SKIP_UNITTESTS=1 \
134- CODEXQB_VALIDATE_SKIP_BEHAVIOR_SMOKE=1 \
135- bash scripts/validate.sh
159+ python3 -I -S -B scripts/run_extracted_validation.py \
160+ --expected-head "$GITHUB_SHA" \
161+ --zip "$tmpdir/CodexQB-source-worktree.zip" \
162+ --root "$tmpdir/source/CodexQB" \
163+ --profile static \
164+ --skip-unit-tests \
165+ --skip-behavior-smoke
136166
137167 required :
138168 name : required / CodexQB
@@ -161,9 +191,18 @@ jobs:
161191 - uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
162192 with :
163193 fetch-depth : 0
194+ persist-credentials : false
164195 - uses : actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
165196 with :
166197 python-version : " 3.13"
198+ - name : Harden ephemeral Linux runner home chain
199+ if : runner.os == 'Linux'
200+ shell : bash
201+ run : |
202+ set -euo pipefail
203+ mapfile -d '' -t account_home_chain < <(python -I -S -B -c 'import os, pathlib, pwd; home = pathlib.Path(pwd.getpwuid(os.geteuid()).pw_dir); current = pathlib.Path(home.anchor); chain = [current]; [(chain.append(current := current / component)) for component in home.parts[1:]]; print(*(str(path) for path in chain), sep="\0", end="\0")')
204+ sudo setfacl --remove-all --remove-default -- "${account_home_chain[@]}"
205+ sudo chmod go-w -- "${account_home_chain[@]}"
167206 - name : Install release validation dependencies
168207 run : python -m pip install --requirement requirements-ci.txt
169208 - name : Run strict release validation
0 commit comments