Repository navigation
attribution: a switch that turns codeaf's signing off (CODEAF_ATTRIBUTION) - #2537
Merged
Merged
Conversation
The relay-admin tool reads CODEAF_RELAY_ADMIN_KEY for its seed file, but the variable was never registered, so internal/config's law that every CODEAF_* variable read in source is a settings row or an operator pin fails on dev. It names a file for a standalone operator tool, so it is plumbing like CODEAF_RELAY beside it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Since #1412 codeaf signed every commit, pull request, issue and comment it wrote, and CODEAF_ATTRIBUTION or a profile's `attribution: false` only produced a "gone" warning. People keep asking how to turn the marks off, so the switch comes back, on by default. `attribution` (CODEAF_ATTRIBUTION) is a settings row again, beside `attribution.model`, resolved the same way: a non-empty variable wins, a malformed one reads as on, then the profile row. Off means codeaf adds no marks anywhere: - the chat belt and every leaf-loop contract carry a one-sentence AttributionOffLaw instead of the attribution law, so a model is told not to add trailers or footers of its own; - gitSignature gains an off state (its zero value still signs), so task landings, kept work, WIP checkpoints and come-home commits stay unsigned; - `codeaf do` / `codeaf run` skip end-of-run worker-commit signing, and a program folder persists `unsigned` so a recovered run honours it too. The harness never strips lines already written, a CONTRIBUTING ban still wins with the switch on, and the model cannot change the row (it is guarded like attribution.model). The retired-row note machinery, whose only entry was `attribution`, is removed. The chat manual's signing sections now explain the switch under the words people search for. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…able GUIDE.md gains a short subsection under "Hand work to tasks" naming the marks codeaf adds and how to turn them off (`/settings` → attribution, CODEAF_ATTRIBUTION=off, CODEAF_ATTRIBUTION_MODEL=off for the model name only, CONTRIBUTING bans). HEADLESS.md's environment table gains CODEAF_ATTRIBUTION. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Why
People keep asking how to stop codeaf from adding
Assisted-by: CodeAF/Co-Authored-By: CodeAFto their commits. Since #1412 there has been no way to:CODEAF_ATTRIBUTIONand theattributionrow were retired and only printed a "gone" warning. I checked this live on stable code before the change.CODEAF_ATTRIBUTION=0,=falseand"attribution": falsewere each ignored, and both trailers still landed.This brings the switch back. Signing stays on by default. Turning it off removes every mark codeaf adds. It can be found in
/settings, the in-binary manual,docs/GUIDE.mdand the headless env table, but nothing advertises it up front (no README section, first-run page or launch notice).What changes
attributionrow (General tab of/settings, shown as "sign commits, pull requests and issues"), envCODEAF_ATTRIBUTION. It resolves likeattribution.model: a non-empty variable wins, a malformed one reads as on, then the profile row. A profile that still holds"attribution": falsefrom before attribution: always sign, and name only the bare model #1412 is obeyed again.AttributionOffLawinstead of the attribution law. Models are told not to add trailers or "drafted with" footers of their own.gitSignaturegains an off state, and its zero value still signs. So task landings, kept work, WIP checkpoints and come-home commits stay unsigned.codeaf do/codeaf runskip end-of-run worker-commit signing. Program folders persistunsigned, so a recovered run honours it.attribution. It's guarded likeattribution.model.attribution, is removed.CODEAF_RELAY_ADMIN_KEYas an operator pin. Hosted relay storage is off until an account is approved #2509 added the variable without registering it, sointernal/config's env-completeness law fails ondev.Validation contract
CODEAF_ATTRIBUTION=off|0|false:SignRunCommitsleaves commits and hashes untouched;AttributionOffLawand none of the trailer or footer constants."attribution": false(written by the/settingsrow) → same as 2;truerestores 1.change_settingrefusesattributionwith the signature guard.attribution.modeloff → bareAssisted-by: CodeAF, as today.session.Config{},gitSignature{}, aLinearwith no setter) still sign.Tests for each item are in
internal/config,internal/exec,internal/session(attribution, run-commit signing, land-run-tree, program folder),cmd/codeaf(applyV3Governancewiring, thedoengine contract withCODEAF_ATTRIBUTION=off),internal/tui3(settings row) andinternal/manual(probes).Checks run
make pr-ready(light gate + fresh tests for the touched packages): exit 0. tui3, cmd/codeaf, config, exec, manual and run were green apart from flakes that passed on retry. In internal/session,TestSealedTreeCarriesTaskHistory,TestSealedTreeCarriesTheSessionTruthandTestUserBashChangesReachTheTurnEndSnapshotalso fail on thedevbase on this machine; two other session tests were flaky.internal/sessionattribution/sign/landing runs: green on three of four runs. One run that overlapped another heavy job on the laptop failed, and its failing test was not captured.🤖 Generated with Claude Code