Skip to content

ci(2284): the gate has its first caller, so the row and the anchor say so - #333

Merged
LukasWodka merged 1 commit into
developfrom
ci/2284-claude-skills-gate-required
Aug 25, 2026
Merged

ci(2284): the gate has its first caller, so the row and the anchor say so#333
LukasWodka merged 1 commit into
developfrom
ci/2284-claude-skills-gate-required

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Refs tracebloc/backend#2284

Why now

claude-skills#36 merged at 13:46 — the first bugbot-gate caller anywhere in the org, from the backend#2284 pilot. That immediately makes two things false:

  1. claude-skills' row. A caller present against an exempt entry is the stale-exemption finding (caller-drift.py:2309). Flipped to required # bugbot-gate-caller.yml.
  2. The anchor's own text.bugbot_gate_rollout_pending asserted "bugbot-gate has ZERO callers anywhere in the org" — true when written 2026-08-23, false from 13:46. The reason rotted the moment the thing it described changed, which is exactly backend#2449's shape.

The anchor stays — 19 repos still cite it and it is still accurate for them.

The derivation is anchored deliberately

The replacement instruction reads:

grep -nE '^\s*exempt: \*bugbot_gate_rollout_pending\s*' repo-inventory.yml

not the bare identifier — because the bare identifier also matches the paragraph describing it, so an unanchored grep would count its own documentation. That is backend#2507, filed today after the same defect was caught by hand five times.

Scope

One row, one anchor paragraph. No branch protection is changed and bugbot / review is NOT required anywhere — the pilot's recommendation was explicitly proceed as advice, do not go required until the Dependabot question is settled (Bugbot does not review Dependabot PRs, so a required context would leave them permanently red with no route to green).


Note

Low Risk
Documentation and inventory contract updates in repo-inventory.yml; no CI wiring or branch protection changes.

Overview
After claude-skills landed the org’s first bugbot-gate caller (claude-skills#36, backend#2284 pilot), this PR fixes caller-drift inventory drift: claude-skills’s bugbot-gate.yml entry flips from exempt: *bugbot_gate_rollout_pending to required with bugbot-gate-caller.yml, so a present caller is no longer recorded as rollout-pending.

The shared bugbot_gate_rollout_pending anchor stays for the other repos still exempt, but its prose is updated—it no longer claims zero callers org-wide—and it now tells readers to re-derive who still cites the anchor with an anchored grep (backend#2507), avoiding a bare identifier match on the paragraph itself.

No branch protection changes and bugbot / review is not made required anywhere; inventory contract only.

Reviewed by Cursor Bugbot for commit aabdac4. Bugbot is set up for automated code reviews on this repo. Configure here.

…y so (backend#2284)
claude-skills#36 merged at 13:46, putting the first bugbot-gate caller
anywhere in the org onto claude-skills/develop. That makes its exempt row
stale (caller-drift.py:2309) and falsifies the anchor in the same move.
The anchor claimed "bugbot-gate has ZERO callers anywhere in the org".
True when written on 2026-08-23, false from 13:46 today -- the reason
rotted at the moment the thing it described changed, which is the shape
backend#2449 exists for.
Its replacement derivation is anchored (backend#2507): the bare identifier
also matches the paragraph describing it, so an unanchored grep would
count its own documentation.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@LukasWodkaLukasWodka self-assigned this Aug 25, 2026

@saadqbalsaadqbal left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Green — 14 pass, nothing pending, no open threads. Approving.

I have direct lineage on this one: the caller that made the row false is the one I approved on claude-skills#36, and bugbot-gate-caller.yml is on claude-skills' default branch at blob 2a207ea2 — the same blob from that diff. So the flip to required # bugbot-gate-caller.yml describes something that actually exists.

And the anchored derivation is measured, not asserted. Ran both against this head: the prescribed ^\s*exempt: \*bugbot_gate_rollout_pending\s*$ returns 19, the bare identifier returns 21. The two extra are the anchor's definition line and the instruction line inside the anchor itself, so the warning about a grep counting its own documentation is exactly right, and the anchored form excludes both. Worth noting it does not match the line that documents it either — the first hits are real exempt: rows.

Correcting the anchor rather than deleting it is the right call at 19 remaining citations, and rewriting it as "had ZERO callers when this was written… THAT IS NO LONGER TRUE" keeps the history that explains why the exemption exists at all.

Staying advisory until the Dependabot question is settled is the part I'd have argued for if it weren't already here — Bugbot doesn't review Dependabot PRs, so a required context would park them red with no route to green, which is client#665 with a different name.

@LukasWodka
LukasWodka merged commit d421757 into developAug 25, 2026
15 checks passed
@LukasWodka
LukasWodka deleted the ci/2284-claude-skills-gate-required branch August 25, 2026 15:25
LukasWodka added a commit that referenced this pull request Aug 25, 2026
… falsifies
REBASED ONTO develop AND NARROWED. This branch originally also flipped
`claude-skills`' `bugbot-gate.yml` row and re-measured the
`bugbot_gate_rollout_pending` anchor. .github#333 (backend#2284) landed both while
this was open, and did the anchor better -- it names `claude-skills#36` as the
first caller. Those edits are dropped rather than merged: two PRs asserting the
same fact in different words is how the next reader learns to distrust both.
What is left is the half #333 did not cover, confirmed by running the audit
against current develop:
1 drift finding(s):
- claude-skills: code-quality.yml is marked `exempt` but a caller exists
So:
1. Flip that row to `required`. `code-quality-caller.yml` is present in
`tracebloc/claude-skills/.github/workflows`.
2. Fix the reason the flip falsifies. `claude-skills` prod `required_checks` said
the three `quality / *` contexts are dropped "BECAUSE the producer is absent",
citing the very exemption being removed. The measured reason is narrower:
`claude-skills/main` carries no required status checks at all (classic
protection, empty `contexts`, measured 2026-08-25), because it is non-train
infra whose `main` is a working branch. `required_checks: []` was and stays
correct; only its cause was wrong.
`release-train` carries the SAME wording and keeps it -- verified it has no
code-quality caller, so its producer really is absent. One comment became
false; the other did not.
`caller-drift.py` against the live org: 1 finding before, "No drift. Every repo
read, every entry matched." after.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
LukasWodka added a commit that referenced this pull request Aug 25, 2026
…quired (#335)
* fix(inventory): claude-skills' code-quality caller, and the reason it falsifies
REBASED ONTO develop AND NARROWED. This branch originally also flipped
`claude-skills`' `bugbot-gate.yml` row and re-measured the
`bugbot_gate_rollout_pending` anchor. .github#333 (backend#2284) landed both while
this was open, and did the anchor better -- it names `claude-skills#36` as the
first caller. Those edits are dropped rather than merged: two PRs asserting the
same fact in different words is how the next reader learns to distrust both.
What is left is the half #333 did not cover, confirmed by running the audit
against current develop:
1 drift finding(s):
- claude-skills: code-quality.yml is marked `exempt` but a caller exists
So:
1. Flip that row to `required`. `code-quality-caller.yml` is present in
`tracebloc/claude-skills/.github/workflows`.
2. Fix the reason the flip falsifies. `claude-skills` prod `required_checks` said
the three `quality / *` contexts are dropped "BECAUSE the producer is absent",
citing the very exemption being removed. The measured reason is narrower:
`claude-skills/main` carries no required status checks at all (classic
protection, empty `contexts`, measured 2026-08-25), because it is non-train
infra whose `main` is a working branch. `required_checks: []` was and stays
correct; only its cause was wrong.
`release-train` carries the SAME wording and keeps it -- verified it has no
code-quality caller, so its producer really is absent. One comment became
false; the other did not.
`caller-drift.py` against the live org: 1 finding before, "No drift. Every repo
read, every entry matched." after.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(inventory): the anchor's own counts, falsified by this PR's flip
Bugbot Medium on .github#335, and correct. Removing the `claude-skills` alias
made the `code_quality_caller_missing` anchor's own prose false:
said: FOUR lines -- two real aliases and two comments
measured: THREE lines -- ONE real alias (release-train) and two comments
Both numbers re-measured and stated, plus the remediation history extended with
`claude-skills` (2026-08-25, .github#335, caller added by claude-skills#36) --
the thread flagged that omission too.
The anchor stays rather than being deleted: `release-train`'s citation is
genuine, verified again here (no code-quality caller in its workflows).
WHY THIS KEEPS RECURRING, since this is the third time in one PR that a flip
falsified a sentence. A count written into prose is falsified by the NEXT flip,
every time -- this anchor's text already carried that scar ("A reader following
it lands back on 'three or four', which is where this sentence started") and
acquired a fresh one anyway. The note now says so explicitly, so the next
person flipping a row knows the count is theirs to re-measure.
Not proposing a mechanism here. But a guard that parses the anchor's stated
counts and compares them to the two greps would end the class, and it is the
same shape as the citation guard .github#329 already landed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(inventory): claude-skills has no fr-gate caller, and cannot use one
UNRELATED PRE-EXISTING DRIFT, surfaced mid-review and fixed here because it is
what keeps `audit` (and therefore the required `gate`) red on this PR. Nothing in
this branch touched the fr-gate row -- `git diff origin/develop..HEAD` does not
mention it -- the audit simply started reporting:
claude-skills: MISSING required caller for fr-gate.yml on develop.
Measured: `fr-gate-caller.yml` is absent from `tracebloc/claude-skills`, while the
inventory carried `fr-gate.yml: required`. So the row asserts a caller that is not
there.
FLIPPED TO EXEMPT RATHER THAN RESTORING THE CALLER, and the reason is in the file
already: this entry's own `rulesets.promotion_merge_commit_only` exemption states
that claude-skills has "no staging branch and no promotion PRs". The fr-gate only
reports on a PR targeting staging/main/master AS A PROMOTION, so there is nothing
here for it to gate -- structurally the same case as release-train's fr-gate
exemption. Requiring a context nothing produces is the client#665 defect this file
warns about two entries above.
The remedy runs both ways and the reason says so: if the caller was removed by
mistake, restore it and flip this back. The audit reports either direction.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LukasWodka@saadqbal