fix(record): the forge's Co-authored-by is attribution, not authorship (#418) - #419
Merged
Conversation
#418) The forbidden-AI-trailer rule was catching the wrong thing, and it is why bot-opened PRs red main on merge. GitHub composes the squash message itself and appends the account that opened the pull request: `Co-authored-by: localai-org-maint-bot <...@users.noreply.github.com>`. Most PRs here are opened by localai-bot or localai-org-maint-bot, so nearly every squash writes that line and trips the AI-identity check. Real instance on main: f64f2b7, invisible until #406 repaired the parse -- which is why it reads as a new failure and is not one. The rule exists so an AI cannot claim it WROTE the code, and that stays. But GitHub is not making an authorship claim; it is recording which account pressed the button, and that account has an audit trail. The claim about AI involvement is already made, separately and explicitly, by AI-Assisted and Assisted-by -- which sit in the same block, are checked as before, and are not relaxed here. Conflating attribution with authorship reds main for correctly authored work while the real declaration sits one line above it, unread. So: a `Co-authored-by` at a GitHub account noreply address is accepted even when the name matches an AI identity token. Keyed on the FORGE'S OWN DOMAIN rather than on the name, which is what stops the exemption being borrowed -- a hand-written `Co-authored-by: Claude <claude@anthropic.com>` still fails, because a model crediting itself does not get to pick GitHub's address space. `Signed-off-by` is excluded from the exemption entirely: a sign-off is a legal assertion about provenance, not attribution, and no reading of that makes a bot sign-off acceptable. AGENTS.md records the same distinction in the same change, so the prose and the checker cannot drift apart -- which is the failure mode this protocol was built to remove. Because this LOOSENS a rule, the guards matter more than the relaxation and are asserted rather than assumed: the hand-written AI co-author case, the Signed-off-by case, and the human co-author case were all green before this change and are all still green after it. Only the forge case moved. What is NOT fixed, and stays refused: the multi-commit squash that doubles the trailer block, and GitHub's `---------` separator. Relaxing the uniqueness rule for those was attempted under #406 and reverted, and this row does not reopen it. Gates: preflight rc=0; test_check_commit_trailers 25; test_check_gate_commands 32; `check-commit-trailers.py --range f64f2b7~1..f64f2b7` now OK on the real commit. Issue: #418 FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
joral
pushed a commit
to joral/vllm.cpp
that referenced
this pull request
Aug 11, 2026
Main advanced again (mudler#418/mudler#419, the forge's `Co-authored-by` is attribution and not authorship) while this branch was being pushed. Merged forward, never rebased. Three keyed records auto-merged and none of the three auto-merges was kept (AGENTS.md "Records"). Each file reset to `origin/main` wholesale and the branch's one scoped edit reapplied against an anchor asserted to match exactly once: - `.agents/engine-matrix.md` — the `KV-EVENTS` row replacement. mudler#419 edits `ENG-TRAILER-MERGE-ARTIFACTS`, not this row, and `KV-EVENTS` stays `ACTIVE`, so no lifecycle count moves. - `.agents/roadmap_v1.md` — the mudler#352 and mudler#353 intake rows, reinserted in the sorted position ahead of `KV-EXTERNAL-CACHE`. - `scripts/check-gate-commands.py` — main's `RUNNABLE_BASELINE` taken entire, with only the `KV-EVENTS` entry and its re-pin rationale reinserted. No product source moves, so the CPU `ctest` recorded on this branch still describes this tree's product code; it and the record gates are re-run on the merged result. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue #418. Row
ENG-FORGE-COAUTHOR. Spec.agents/specs/forge-coauthor-attribution.md. Follow-up to #406.This is the remaining reason bot-opened PRs red
mainon merge.The rule was catching the wrong thing
GitHub composes the squash message itself and appends the account that opened the PR:
Most PRs here are opened by
localai-bot/localai-org-maint-bot, so nearly every squash writes that line and trips the AI-identity check. Real instance:f64f2b71— invisible until #406 repaired the parse, which is why it reads as a new failure and isn't one.The rule exists so an AI cannot claim it wrote the code, and that stays. But GitHub isn't making an authorship claim — it's recording which account pressed the button. The claim about AI involvement is already made, separately and explicitly, by
AI-AssistedandAssisted-by, which sit in the same block and are untouched here.The change
A
Co-authored-byat a GitHub account noreply address is accepted even when the name matches an AI identity token — keyed on the forge's own domain, not on the name, which is what stops the exemption being borrowed.Co-authored-by: Claude <claude@anthropic.com>→ still fails. A model crediting itself doesn't get to pick GitHub's address space.Signed-off-by→ no exemption at all. A sign-off is a legal assertion about provenance, not attribution.AGENTS.mdrecords the same distinction in the same change, so prose and checker can't drift — the failure mode this protocol exists to remove.Guards matter more than the relaxation here
Because this loosens a rule, the three guards are asserted rather than assumed. All were green before and after; only the forge case moved:
f64f2b71)Signed-off-byat a noreply addressStill refused, deliberately
The multi-commit squash that doubles the trailer block, and GitHub's
---------separator. Relaxing the uniqueness rule for those was attempted under #406 and reverted; this row does not reopen it.Evidence
preflight rc=0;
test_check_commit_trailers25;test_check_gate_commands32;check-commit-trailers.py --range f64f2b71~1..f64f2b71now OK on the real commit.Also confirmed in production:
211ff73a(the #416 merge) has the exact trailers-plus-appended-co-author shape that used to fail, and passes — #409's fix working on a real merge rather than a fixture.🤖 Generated with Claude Code