The firstmate repository's LOCAL git config carried:
[user]
email = test@example.com
name = Test
That overrides the correct global identity (Sungin Kim <sunginapp@gmail.com>), and every pooled crew worktree reads the repository config, so every firstmate-repo commit made from a crew copy was authored as Test <test@example.com>.
Observed 2026-09-02
Two live workers had already committed under it:
worktree 10: Test <test@example.com> | fix(zellij): bind endpoint identity to recorded tab id, not just tab title
worktree 9: Test <test@example.com> | fix(tests): bound the test sweep on hangs and skip on missing optional interpreters
A worker in the ArkNode-AI clone committed correctly as Sungin Kim <sunginapp@gmail.com> in the same window, which is what isolated the cause to this repository's own config rather than to the environment.
Why this matters
GitHub attributes a squash merge to the PR author and adds Co-authored-by trailers from the squashed commits. So this identity reaches main as a co-author trailer - the same failure surface as #225, by a third mechanism neither that issue nor #206 names.
It also silently falsifies authorship on every commit made this way, which is worse than a trailer: a reader cannot tell a real commit from a fixture-authored one.
Root cause to establish
A test fixture set the identity against the real repository instead of a temporary one. The suite creates throwaway repositories constantly and they all need an identity, so one fixture almost certainly ran git config user.name without -C <tmpdir> or without GIT_CONFIG_GLOBAL pointing at a scratch file, or ran inside FM_ROOT when it meant to run inside its own temporary tree.
The fix is not just unsetting it. The override has been removed by hand so live work is unblocked, but nothing prevents the next suite run from writing it straight back. The defect is the fixture, and the test worth adding is one that fails if the suite mutates the real repository's config at all.
Scope note
Consider auditing whether any other real-repository state the suite can reach is written the same way - config keys, hooks, remotes - since the same missing-isolation mistake would look identical for each.
The firstmate repository's LOCAL git config carried:
That overrides the correct global identity (
Sungin Kim <sunginapp@gmail.com>), and every pooled crew worktree reads the repository config, so every firstmate-repo commit made from a crew copy was authored asTest <test@example.com>.Observed 2026-09-02
Two live workers had already committed under it:
A worker in the ArkNode-AI clone committed correctly as
Sungin Kim <sunginapp@gmail.com>in the same window, which is what isolated the cause to this repository's own config rather than to the environment.Why this matters
GitHub attributes a squash merge to the PR author and adds
Co-authored-bytrailers from the squashed commits. So this identity reachesmainas a co-author trailer - the same failure surface as #225, by a third mechanism neither that issue nor #206 names.It also silently falsifies authorship on every commit made this way, which is worse than a trailer: a reader cannot tell a real commit from a fixture-authored one.
Root cause to establish
A test fixture set the identity against the real repository instead of a temporary one. The suite creates throwaway repositories constantly and they all need an identity, so one fixture almost certainly ran
git config user.namewithout-C <tmpdir>or withoutGIT_CONFIG_GLOBALpointing at a scratch file, or ran insideFM_ROOTwhen it meant to run inside its own temporary tree.The fix is not just unsetting it. The override has been removed by hand so live work is unblocked, but nothing prevents the next suite run from writing it straight back. The defect is the fixture, and the test worth adding is one that fails if the suite mutates the real repository's config at all.
Scope note
Consider auditing whether any other real-repository state the suite can reach is written the same way - config keys, hooks, remotes - since the same missing-isolation mistake would look identical for each.