Skip to content
128 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Merge commit authors and hovercards: commits show their accounts, every name opens a card (repos 0016)1import assert from "node:assert/strict";
2import { test } from "node:test";
3
4import type { Commit, EmailOwner } from "@g1t/contracts";
5
6import { addressesToMatch, coAuthorsOf, contributorPerson, personFor, profileHref, showCommit, shownName } from "./commit-people.ts";
7
8const syntaqx: EmailOwner = { id: "usr_01hx", username: "syntaqx", avatar: "f00d" };
9
10/**
11 * What `email_owners` answers (services/identity/src/emails.rs): confirmed
12 * addresses and noreply addresses only, so an unconfirmed address, or a
13 * noreply address whose id does not match, is simply missing.
14 */
15const owners: Record<string, EmailOwner> = {
16 "syntaqx@gmail.com": syntaqx,
17 "01hx0000+syntaqx@users.noreply.g1t.sh": syntaqx,
18 "1234abcd+gone@users.noreply.g1t.sh": { id: "usr_ghost", username: "ghost", avatar: null },
19};
20
21function commit(name: string, email: string, message = "Change something"): Commit {
22 return { hash: "a".repeat(40), treeHash: "b".repeat(40), message, author: { name, email }, parents: [], authoredAt: "2026-10-08T12:00:00Z" };
23}
24
25test("a confirmed address is the account, whatever name the commit carries", () => {
26 const person = personFor("Chase Pierce", "Syntaqx@Gmail.com ", owners);
27 assert.deepEqual(person, { kind: "user", name: "Chase Pierce", username: "syntaqx", avatar: "f00d" });
28 assert.equal(shownName(person), "syntaqx");
29 assert.equal(profileHref(person), "/u/syntaqx");
30});
31
32test("an unconfirmed address matches nobody: the name on the commit, no link", () => {
33 // email_owners leaves unconfirmed addresses out of its answer.
34 const person = personFor("Chase Pierce", "unconfirmed@example.com", owners);
35 assert.deepEqual(person, { kind: "author", name: "Chase Pierce", username: null, avatar: null });
36 assert.equal(shownName(person), "Chase Pierce");
37 assert.equal(profileHref(person), null);
38});
39
40test("the noreply address is the account", () => {
41 assert.equal(personFor("syntaqx", "01hx0000+syntaqx@users.noreply.g1t.sh", owners).username, "syntaqx");
42});
43
44test("a deleted account's commits are ghost's, with no profile", () => {
45 const person = personFor("Gone", "1234abcd+gone@users.noreply.g1t.sh", owners);
46 assert.equal(person.kind, "ghost");
47 assert.equal(shownName(person), "ghost");
48 assert.equal(profileHref(person), null);
49});
50
51test("g1t's commits, now and as its agents and queue made them before, are g1t", () => {
52 for (const [name, email] of [
53 ["g1t", "g1t@users.noreply.g1t.sh"],
54 ["g1t agent", "agent@g1t.sh"],
55 ["g1t merge queue", "queue@g1t.sh"],
56 ["g1t", "mergecheck@g1t.sh"],
57 ]) {
58 const person = personFor(name, email, {});
59 assert.equal(person.kind, "g1t", email);
60 assert.equal(shownName(person), "g1t");
61 assert.equal(profileHref(person), null);
62 }
63 // Only g1t's own addresses: a name alone is not enough.
64 assert.equal(personFor("g1t agent", "someone@example.com", {}).kind, "author");
65});
66
67test("a commit sent to the page carries no address at all", () => {
68 const shown = showCommit(
69 commit("Chase Pierce", "syntaqx@gmail.com", "Fix it\n\nCo-authored-by: Ada <ada@private.example>\nCo-authored-by: Sam <syntaqx@gmail.com>"),
70 owners,
71 );
72 const sent = JSON.stringify(shown.author) + JSON.stringify(shown.coAuthors);
73 assert.ok(!sent.includes("@"), sent);
74 assert.equal("email" in shown.author, false);
75 assert.deepEqual(
76 shown.coAuthors.map((person) => [person.kind, shownName(person)]),
77 [
78 ["author", "Ada"],
79 ["user", "syntaqx"],
80 ],
81 );
82});
83
84test("one question per page: every distinct address, g1t's left out", () => {
85 const asked = addressesToMatch([
86 commit("A", "Ada@Example.com"),
87 commit("A", "ada@example.com", "x\n\nCo-Authored-By: Grace <grace@example.com>"),
88 commit("g1t", "g1t@users.noreply.g1t.sh"),
89 commit("g1t agent", "agent@g1t.sh"),
90 commit("Nobody", ""),
91 ]);
92 assert.deepEqual(asked.sort(), ["ada@example.com", "grace@example.com"]);
93});
94
95test("co-authors are read from the trailers only", () => {
96 assert.deepEqual(coAuthorsOf("Subject\n\nCo-authored-by: Ada <ada@x.io>\n"), [{ name: "Ada", email: "ada@x.io" }]);
97 assert.deepEqual(coAuthorsOf("Subject\n\nCo-authored-by: Ada <ada@x.io> said hi\n\nThe end."), []);
98});
99
100test("contributors and commits show one person the same way", () => {
101 const base = { name: "syntaqx", commits: 361, firstAt: "", lastAt: "", weeks: [] };
102 const fromTally = contributorPerson({ ...base, kind: "user", username: "syntaqx", avatar: "f00d" });
103 const fromCommit = personFor("Chase Pierce", "syntaqx@gmail.com", owners);
104 assert.equal(shownName(fromTally), shownName(fromCommit));
105 assert.equal(fromTally.avatar, fromCommit.avatar);
106 assert.equal(profileHref(fromTally), profileHref(fromCommit));
107 assert.equal(contributorPerson({ ...base, kind: "g1t", name: "g1t" }).kind, "g1t");
108 assert.equal(contributorPerson({ ...base, kind: "user", username: "ghost" }).kind, "ghost");
109 assert.deepEqual(contributorPerson({ ...base, kind: "author", name: "Sam" }), { kind: "author", name: "Sam", username: null, avatar: null });
110});
Coding agents show as themselves on commits and contributors: Claude, Codex, Copilot, Gemini, Jules, Cursor, Devin, Aider, Dependabot, Renovate and GitHub Actions are known by the address they write on their commits (never by name), shown with their maker's mark, their own name and an agent or bot label, and a card saying what each is. Anyone else not on g1t gets a card too, saying so and how to claim the commits by adding the address. Contributor lists are worked out again (stats version 2) so an agent counts once.111
112test("a coding agent is shown as itself by the address on its commit, never by its name", () => {
113 const claude = personFor("Claude", "noreply@anthropic.com", {});
114 assert.deepEqual(claude, { kind: "agent", name: "Claude", username: null, avatar: null, agent: "claude" });
115 assert.equal(shownName(claude), "Claude");
116 assert.equal(profileHref(claude), null);
117 const bot = personFor("dependabot[bot]", "49699333+dependabot[bot]@users.noreply.github.com", {});
118 assert.equal(bot.kind, "agent");
119 assert.equal(shownName(bot), "Dependabot", "its own name, not the login on the commit");
120 assert.equal(personFor("Claude", "claude@example.com", {}).kind, "author", "a person called Claude stays a person");
121 const commit = showCommit(
122 { hash: "a".repeat(40), message: "Fix it\n\nCo-Authored-By: Claude <noreply@anthropic.com>", author: { name: "Ada", email: "ada@example.com" } } as never,
123 {},
124 );
125 assert.equal(commit.coAuthors[0]?.kind, "agent");
126 assert.deepEqual(contributorPerson({ kind: "agent", name: "Claude", agent: "claude" }), { kind: "agent", name: "Claude", username: null, avatar: null, agent: "claude" });
127 assert.equal(contributorPerson({ kind: "agent", name: "Robo", agent: "unknown-agent" }).kind, "author", "an id this site doesn't know is an author");
128});

This file's history is long; its oldest lines are credited to the oldest commit read.