Skip to content

A test fixture wrote user.name=Test into the real repository git config, so every crew commit was authored as Test <test@example.com> #245

Description

@HelloWorldSungin

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions