Skip to content

Commit 86a148d

Browse files
gHashTaggHashTag
andauthored
ci: harden trusted-bot gate bypass against human branch-updates (Closes #1031) (#1080)
The #1059 bypass keyed only on github.actor, which is dependabot[bot] only on the bot's own push. A maintainer 'Update branch' produces a synchronize event with github.actor=<human>, so L1/Issue/NOW gates ran and failed on routine dependency PRs. Add a PR-author check (github.event.pull_request.user.login) which stays dependabot[bot] regardless of trigger. Human PRs remain fully gated. Closes #1031 Co-authored-by: gHashTag <admin@t27.ai>
1 parent 196df5c commit 86a148d

4 files changed

Lines changed: 18 additions & 3 deletions

File tree

.github/workflows/issue-gate.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ jobs:
1313
check-linked-issue:
1414
runs-on: ubuntu-latest
1515
# Closes #1059: bypass Issue Gate for trusted bots (Dependabot opens dep PRs without issues)
16-
if: github.actor != 'dependabot[bot]' && github.actor != 'github-actions[bot]'
16+
if: >-
17+
github.actor != 'dependabot[bot]' && github.actor != 'github-actions[bot]'
18+
&& github.event.pull_request.user.login != 'dependabot[bot]'
19+
&& github.event.pull_request.user.login != 'github-actions[bot]'
1720
steps:
1821
- name: Check for linked issues in PR
1922
env:

.github/workflows/l1-traceability.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ jobs:
99
name: Check L1 TRACEABILITY
1010
runs-on: ubuntu-latest
1111
# Closes #1059: bypass L1 gate for trusted bots (Dependabot maintains deps, not features)
12-
if: github.actor != 'dependabot[bot]' && github.actor != 'github-actions[bot]'
12+
if: >-
13+
github.actor != 'dependabot[bot]' && github.actor != 'github-actions[bot]'
14+
&& github.event.pull_request.user.login != 'dependabot[bot]'
15+
&& github.event.pull_request.user.login != 'github-actions[bot]'
1316
steps:
1417
- name: Checkout repository
1518
uses: actions/checkout@v4

.github/workflows/now-sync-gate.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ jobs:
99
check-now-freshness:
1010
runs-on: ubuntu-latest
1111
# Closes #1059: bypass NOW Sync Gate for trusted bots (deps PRs don't touch docs/NOW.md)
12-
if: github.actor != 'dependabot[bot]' && github.actor != 'github-actions[bot]'
12+
if: >-
13+
github.actor != 'dependabot[bot]' && github.actor != 'github-actions[bot]'
14+
&& github.event.pull_request.user.login != 'dependabot[bot]'
15+
&& github.event.pull_request.user.login != 'github-actions[bot]'
1316
steps:
1417
- uses: actions/checkout@v4
1518
with:

docs/NOW.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
Last updated: 2026-06-14
44

5+
## ci-bot-bypass-author-guard -- harden trusted-bot gate bypass against human branch-updates (Closes #1031)
6+
7+
- **WHERE** (CI only): `.github/workflows/l1-traceability.yml`, `.github/workflows/issue-gate.yml`, `.github/workflows/now-sync-gate.yml`. Each gate job's `if:` guard is extended from the actor-only check (`github.actor != 'dependabot[bot]' && != 'github-actions[bot]'`) to ALSO require `github.event.pull_request.user.login != 'dependabot[bot]'` and `!= 'github-actions[bot]'`. No source, no specs, no codegen, no conformance JSON, no `gen/` artefacts touched.
8+
- **Why**: the original #1059 bypass keyed only on `github.actor`, which is the Dependabot bot only on its OWN push. When a maintainer clicks 'Update branch' on a Dependabot PR, the resulting `synchronize` event carries `github.actor = <human>`, so all three gates RAN and FAILED (dependency bumps legitimately have no `Closes #N` and no `docs/NOW.md` change), blocking routine dep PRs #1042/#1044/#1045/#1043/#1047/#1048/#1057/#1058 behind branch protection. `github.event.pull_request.user.login` is the PR AUTHOR and stays `dependabot[bot]` regardless of who triggered the event, so bot dependency PRs now SKIP the gates even after a human branch-update; human PRs remain fully gated by Constitutional Law L1. On `push` events `pull_request` is null so the added clause is vacuously true -- existing push behavior of now-sync-gate is unchanged. L6 untouched; L5 untouched (no silicon impact); L4 not applicable (workflow YAML, not a `.t27` spec). Closes #1031.
9+
- **Anchor**: phi^2 + phi^-2 = 3
10+
511
## conformance-structural-to-bitexact -- promote 6 structural packs to bit-precise (IBM HFP, x87, NF4, GFTernary) (Closes #1076)
612

713
- **WHERE** (conformance vectors): extends `conformance/vectors/gen_all_formats.py` with dedicated reference codecs that promote 6 packs from structural (`bitexact: false`, placeholder) to bit-precise (`bitexact: true`, `abs_error = 0` for every recorded vector): `ibm_hfp32/64/128` (IBM Hexadecimal Floating Point, base-16 exponent, layout S1:E7 excess-64:M, value = 0.M(2) * 16^(E-64)); `x87_fp80` (Intel 80-bit extended with the explicit integer bit as the MSB of the 64-bit significand field, S1:E15:SIG64, bias 16383); `nf4` (QLoRA/bitsandbytes NF4 16-entry quantile table over [-1,1], exhaustive 16-code lookup); `gfternary` (2-bit {-phi, 0, +phi}, exhaustive 4-code enumeration). Adds `make_ibm_hfp_decoder`/`ibm_hfp_encode_exact`, `make_x87_decoder`/`x87_encode_exact`, `make_nf4_decoder` + `NF4_TABLE`, `make_gfternary_decoder`, and routes them in `build_decodable`/`build_bitexact_pack`. Regenerates `INDEX_all_formats.json` (`total_packs=83, bitexact_packs=55, structural_packs=28`) and the 6 affected `*_conformance_v0.json` packs. `README.md` index, counts, SHA-256 block, and a new changelog entry updated. The catalog itself is unchanged at 83 formats; only round-trip depth increases. Follows #1070.

0 commit comments

Comments
 (0)