feat(attribution): one verified address for the agent on every forge #964
No reviewers
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure!964
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/wz68-bot-identity"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Agent commits were authored as the GitHub App's noreply alias, built from
/github/coilyco-ops-user-id. That address can never receive mail, so it could not be verified on any forge, and the agent rendered as a placeholder everywhere except GitHub.coilyco-ops@coilysiren.meis now verified on all three forges the estate publishes to:coilyco-opsuser already carried it, verified, as a secondary address. Nothing to do.bot.coilysiren.mehandle, via the SES inbound path from coilysiren/inbox#440.One address attributes the agent on all three. The commits already authored under it attributed retroactively on each forge the moment its verification landed, confirmed on GitHub by querying a July commit and seeing
author.login = coilyco-ops.What this removes
/github/coilyco-ops-user-idSSM lookup from the Ansible role.-AOSguardPathparameter from the Windows converge script. Both existed solely to feed that lookup, so AOSguard is no longer a dependency of attribution convergence at all.The task named
Build the cross-forge bot author identityis finally accurate rather than being the most GitHub-shaped string in the estate.What is untouched
The
coilyco-ops[bot]GitHub App. It still authenticates and pushes. GitHub links commits to accounts by author email regardless of which credential pushed them, so authentication and attribution are independent and both work. The machine user holds no token, no repo access, and no collaborator grant, so this adds attribution without adding credential surface.provision_coilyco_ops_bot_helper.pyand its test are deliberately unchanged: they provision the App's own noreply alias, which is a separate concern from commit attribution, and the App still exists.Tests
scripts/agent_git_attribution_test.pyneeded no change (its fixtures usebot@example.invalid).scripts/windows_git_convergence_test.pyasserted the oldcoilyco-ops[bot] <123+...shape and staged a fake AOSguard to feed the SSM call, both now gone.18/18 pass in 0.38s.
A trap worth knowing about
Running
just agent-git-attribution-testfrom inside an agent session fails one test,test_hook_and_shim_set_bot_author_and_two_coauthors, and takes ~190s doing it. This is not a defect and predates this branch: it reproduces identically onmainatb16da78.The cause is that the harness pre-exports
AGENT_GIT_ATTRIBUTION_COAUTHORand prepends the real shim directory toPATH. The test doesos.environ.copy(), so its staged shim resolves the "real git" back to the ambient shim and recurses until git exits 2. Unset that variable and strip the shim directory fromPATHand the same test passes in 0.55s.Worth a follow-up so the test sanitises its own environment rather than inheriting a hostile one, but out of scope here.
Rollout
This is authored here; the fleet converge is the separate act. No host changes identity until
agent-git-attributionruns on it.