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.
| Costs: a statement that keeps usage sold, running g1t, subscriptions and what was given away (comped, free use, trial, pool) apart, and says who was paid; free use carries its own cost; the run button says it is running | 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; | |
| 3 | ||
| Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one. | 4 | import { INVITES_DONE, MAX_GRANT, doneMessage, invitesHref, invitesTab, joinedThrough, parseGrant } from "./invites.ts"; |
| Costs: a statement that keeps usage sold, running g1t, subscriptions and what was given away (comped, free use, trial, pool) apart, and says who was paid; free use carries its own cost; the run button says it is running | 5 | |
| Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one. | 6 | test("the page has one address, with its search and tab", () => { |
| Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them. | 7 | assert.equal(invitesHref(), "/invites"); |
| 8 | assert.equal(invitesHref({ q: "g1t-k7m2", empty: "" }), "/invites?q=g1t-k7m2"); | |
| Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one. | 9 | assert.equal(invitesHref({ tab: "g1t" }), "/invites?tab=g1t"); |
| 10 | assert.equal(invitesTab("g1t"), "g1t"); | |
| 11 | assert.equal(invitesTab("waitlist"), "all"); | |
| 12 | assert.equal(invitesTab(null), "all"); | |
| Costs: a statement that keeps usage sold, running g1t, subscriptions and what was given away (comped, free use, trial, pool) apart, and says who was paid; free use carries its own cost; the run button says it is running | 13 | }); |
| Merge shared invite links: label, uses, expiry, domains; joined through recorded (identity 0038) | 14 | |
| Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one. | 15 | test("revoking and granting say so, and nothing else is flashed", () => { |
| Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them. | 16 | assert.equal(doneMessage("revoked"), INVITES_DONE.revoked); |
| Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one. | 17 | assert.equal(doneMessage("granted"), INVITES_DONE.granted); |
| Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them. | 18 | assert.equal(doneMessage("approved"), null); |
| 19 | assert.equal(doneMessage(null), null); | |
| Merge shared invite links: label, uses, expiry, domains; joined through recorded (identity 0038) | 20 | }); |
| 21 | ||
| Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them. | 22 | test("an account made with a shared link says where it came from", () => { |
| Merge shared invite links: label, uses, expiry, domains; joined through recorded (identity 0038) | 23 | assert.equal(joinedThrough("Cloudflare judges"), "Joined through Cloudflare judges"); |
| 24 | }); | |
| Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one. | 25 | |
| 26 | test("a grant names a person, a whole number of invites and why", () => { | |
| 27 | const form = (fields: Record<string, string>) => new Map(Object.entries(fields)); | |
| 28 | assert.deepEqual(parseGrant(form({ username: "@Ada", amount: "10", note: "Bringing her team" })), { | |
| 29 | ok: true, | |
| 30 | value: { username: "ada", amount: 10, note: "Bringing her team" }, | |
| 31 | }); | |
| 32 | assert.equal(parseGrant(form({ username: "ada", amount: "-5", note: "Too many" })).ok, true); | |
| 33 | assert.equal(parseGrant(form({ username: "not a name", amount: "10", note: "why" })).ok, false); | |
| 34 | assert.equal(parseGrant(form({ username: "ada", amount: "0", note: "why" })).ok, false); | |
| 35 | assert.equal(parseGrant(form({ username: "ada", amount: String(MAX_GRANT + 1), note: "why" })).ok, false); | |
| 36 | assert.equal(parseGrant(form({ username: "ada", amount: "2.5", note: "why" })).ok, false); | |
| 37 | assert.equal(parseGrant(form({ username: "ada", amount: "10", note: "" })).ok, false); | |
| 38 | }); |
This file's history is long; its oldest lines are credited to the oldest commit read.