Skip to content

fix(record): the forge's Co-authored-by is attribution, not authorship (#418) - #419

Merged
mudler merged 1 commit into
mainfrom
row/ENG-FORGE-COAUTHOR
Aug 11, 2026
Merged

fix(record): the forge's Co-authored-by is attribution, not authorship (#418)#419
mudler merged 1 commit into
mainfrom
row/ENG-FORGE-COAUTHOR

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

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 main on merge.

The rule was catching the wrong thing

GitHub composes the squash message itself and appends the account that opened the PR:

Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com>

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-Assisted and Assisted-by, which sit in the same block and are untouched here.

The change

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, not on the name, which is what stops the exemption being borrowed.

  • Hand-written Co-authored-by: Claude <claude@anthropic.com>still fails. A model crediting itself doesn't get to pick GitHub's address space.
  • Signed-off-byno exemption at all. A sign-off is a legal assertion about provenance, not attribution.

AGENTS.md records 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:

Case Before After
forge bot co-author (f64f2b71)
hand-written AI co-author
Signed-off-by at a noreply address
human co-author

Still 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_trailers 25; test_check_gate_commands 32; check-commit-trailers.py --range f64f2b71~1..f64f2b71 now 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

#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]
@mudler
mudler merged commit 902b0e3 into main Aug 11, 2026
12 of 14 checks passed
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]
Sign up for free to 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