Use "diffy" instead of GitHub's Octocat in examples and placeholders (#39)
Diffy is Diffinery's own example user. The docs, form placeholders (people, collaborators, the GitHub importer), email samples and tests use it where they said octocat. Claude-Session: https://claude.ai/code/session_01QMFviVKD61QaDPxdrh7C3f Co-authored-by: Claude <noreply@anthropic.com>
Canberk Demirci authored · GitHub committed signed1 parent 6b6c691commit 87938449a3ab32e1cce7f7c5304b88d105edc755Browse files
30 files changed+153−153
Files (30)
- apps/diffinery/docs/accounts/invitations.md+9−9
- apps/diffinery/docs/accounts/notifications.md+14−14
- apps/diffinery/docs/accounts/organizations.md+6−6
- apps/diffinery/docs/accounts/permissions.md+5−5
- apps/diffinery/docs/accounts/profile-and-preferences.md+6−6
- apps/diffinery/docs/accounts/tokens.md+1−1
- apps/diffinery/docs/actions/environments.md+4−4
- apps/diffinery/docs/actions/oidc.md+1−1
- apps/diffinery/docs/admin/site-administration.md+3−3
- apps/diffinery/docs/agents/overview.md+2−2
- apps/diffinery/docs/collaboration/issues.md+9−9
- apps/diffinery/docs/collaboration/merge-queue.md+2−2
- apps/diffinery/docs/collaboration/pull-requests.md+6−6
- apps/diffinery/docs/collaboration/releases.md+14−14
- apps/diffinery/docs/concepts.md+1−1
- apps/diffinery/docs/migrate-from-github.md+2−2
- apps/diffinery/docs/packages/container-registry.md+10−10
- apps/diffinery/docs/quickstart.md+2−2
- apps/diffinery/docs/reference/rest-api.md+4−4
- apps/diffinery/docs/reference/webhook-events.md+27−27
- apps/diffinery/docs/repositories/overview.md+6−6
- apps/diffinery/docs/security/audit-log.md+1−1
- apps/diffinery/docs/security/push-protection.md+1−1
- apps/diffinery/src/docs/reference.ts+1−1
- apps/diffinery/src/mail/samples.ts+2−2
- apps/diffinery/src/web/account.tsx+1−1
- apps/diffinery/src/web/imports.tsx+3−3
- apps/diffinery/src/web/repo-settings.tsx+1−1
- apps/diffinery/test/e2e/e2e.test.mjs+3−3
- apps/diffinery/test/unit/email.test.ts+6−6
modifiedapps/diffinery/docs/accounts/invitations.md+9−9View file
| @@ -43,13 +43,13 @@ | ||
| 43 | 43 | Organization owners and admins, and site administrators. The **Add people** form on the organization's **People** tab takes a username or an email address. |
| 44 | 44 | |
| 45 | 45 | 1. Open the organization's page, for example `https://diffinery.com/acme`, and click the **People** tab. |
| 46 | -2. Under **Add people**, enter a **Username or email**: `octocat` (or `@octocat`) for someone who has an account, or `friend@example.com` for anyone. | |
| 46 | +2. Under **Add people**, enter a **Username or email**: `diffy` (or `@diffy`) for someone who has an account, or `friend@example.com` for anyone. | |
| 47 | 47 | 3. Choose a **Role**: **Member** (default), **Admin** or **Owner**. Only owners can choose **Owner**. |
| 48 | 48 | 4. Click **Add**. |
| 49 | 49 | |
| 50 | 50 | | You entered | What happens | |
| 51 | 51 | | --- | --- | |
| 52 | -| A username, or the email address of an existing account | They join right away, with no invitation to accept: "Added octocat to acme as member. We let them know." They get an email and an in-app notification. | | |
| 52 | +| A username, or the email address of an existing account | They join right away, with no invitation to accept: "Added diffy to acme as member. We let them know." They get an email and an in-app notification. | | |
| 53 | 53 | | An email address without an account | Diffinery emails an invitation. The page shows **Invitation sent to friend@example.com** with the link and a copy button, and the note "They don't have an account yet, so we emailed them an invitation. You can also send them this link yourself. It works once and expires in 14 days: opening it creates their account and passkey and adds them here." | |
| 54 | 54 | |
| 55 | 55 | The invitation then appears under **Pending invitations** on the same tab, with who sent it, when, the expiry date and the role. See [Organizations](/docs/accounts/organizations#add-people) for every message the form can show. |
| @@ -70,20 +70,20 @@ | ||
| 70 | 70 | |
| 71 | 71 | Repository admins. The **Add people** form on the repository's **Settings → Collaborators** page (`/acme/website/settings/access`) works the same way, and also accepts agents: |
| 72 | 72 | |
| 73 | -1. Under **Add people**, enter a **Username or email**: a person (`octocat`), an agent (`review-bot`) or an email address (`friend@example.com`). | |
| 73 | +1. Under **Add people**, enter a **Username or email**: a person (`diffy`), an agent (`review-bot`) or an email address (`friend@example.com`). | |
| 74 | 74 | 2. Choose a **Role**: **Read**, **Triage**, **Write** (default), **Maintain** or **Admin**. |
| 75 | 75 | 3. Click **Add**. |
| 76 | 76 | |
| 77 | 77 | | You entered | What happens | |
| 78 | 78 | | --- | --- | |
| 79 | -| The username of a person or an agent, or the email address of an existing account | They get the role right away as a direct collaborator: "octocat now has write access. We let them know." People get an email and an in-app notification. If they already were a collaborator, their role changes to the one you chose. | | |
| 79 | +| The username of a person or an agent, or the email address of an existing account | They get the role right away as a direct collaborator: "diffy now has write access. We let them know." People get an email and an in-app notification. If they already were a collaborator, their role changes to the one you chose. | | |
| 80 | 80 | | An email address without an account | Diffinery emails an invitation and shows **Invitation sent to friend@example.com** with the link to send yourself. When the person joins, they get that role on the repository. | |
| 81 | 81 | |
| 82 | 82 | | Message | Cause | |
| 83 | 83 | | --- | --- | |
| 84 | -| "no one has the username octocat; to invite someone new, enter their email address" | No account has that username. | | |
| 84 | +| "no one has the username diffy; to invite someone new, enter their email address" | No account has that username. | | |
| 85 | 85 | | "acme is an organization; add its people instead" | Organizations can't be collaborators. | |
| 86 | -| "octocat's account is disabled" | A site administrator disabled the account. | | |
| 86 | +| "diffy's account is disabled" | A site administrator disabled the account. | | |
| 87 | 87 | | "enter a valid email address" | The text has an `@` but isn't a complete address. | |
| 88 | 88 | |
| 89 | 89 | The repository's **Settings → Collaborators** page doesn't list pending invitations. See [Permissions](/docs/accounts/permissions) for what each role allows. |
| @@ -184,9 +184,9 @@ | ||
| 184 | 184 | |
| 185 | 185 | | Invite | Subject | |
| 186 | 186 | | --- | --- | |
| 187 | -| Organization | `@octocat invited you to join the acme organization on Diffinery` | | |
| 188 | -| Repository | `@octocat invited you to collaborate on acme/website` | | |
| 189 | -| Instance | `@octocat invited you to Diffinery` | | |
| 187 | +| Organization | `@diffy invited you to join the acme organization on Diffinery` | | |
| 188 | +| Repository | `@diffy invited you to collaborate on acme/website` | | |
| 189 | +| Instance | `@diffy invited you to Diffinery` | | |
| 190 | 190 | |
| 191 | 191 | The email lists who invited you, the organization or repository and the role (for organization and repository invites) and the expiry date, and has an **Accept invitation** button. It says the invitation only works for that email address. Invite emails can't be turned off, because they are the only way to reach someone without an account. |
| 192 | 192 |
modifiedapps/diffinery/docs/accounts/notifications.md+14−14View file
| @@ -18,7 +18,7 @@ | ||
| 18 | 18 | |
| 19 | 19 | ## The notifications list |
| 20 | 20 | |
| 21 | -The bell in the header opens **Notifications** (`/notifications`). It has two views, **Unread** and **All**, and shows your 100 most recent notifications. Each entry has an icon for its kind (a pull request, an issue, a comment, a failed run in red, an organization or a repository), a title such as `octocat commented on acme/website#42: Cache build artifacts`, its kind (for example `issue comment`, `pull request review` or `run failed`) and when it happened. | |
| 21 | +The bell in the header opens **Notifications** (`/notifications`). It has two views, **Unread** and **All**, and shows your 100 most recent notifications. Each entry has an icon for its kind (a pull request, an issue, a comment, a failed run in red, an organization or a repository), a title such as `diffy commented on acme/website#42: Cache build artifacts`, its kind (for example `issue comment`, `pull request review` or `run failed`) and when it happened. | |
| 22 | 22 | |
| 23 | 23 | - Click an entry to open what it is about; that marks it read. |
| 24 | 24 | - Click the check mark (**Mark as read**) next to an unread entry to mark only that one read. |
| @@ -187,7 +187,7 @@ | ||
| 187 | 187 | |
| 188 | 188 | | Header | Value | |
| 189 | 189 | | --- | --- | |
| 190 | -| `From` | `notifications@diffinery.com`. The display name is the person who acted, for issue and pull request emails (`octocat (Diffinery)`), otherwise `Diffinery`. | | |
| 190 | +| `From` | `notifications@diffinery.com`. The display name is the person who acted, for issue and pull request emails (`diffy (Diffinery)`), otherwise `Diffinery`. | | |
| 191 | 191 | | `Subject` | Issue and pull request emails: `[acme/website] <title> (PR #42)` or `(Issue #37)`, with `Re: ` for every email after the first. Others start with `[acme/website]` or `[Diffinery]`. | |
| 192 | 192 | | `X-Diffinery-Reason` | Why you got the email (see below), like GitHub's `X-GitHub-Reason` | |
| 193 | 193 | | `X-Diffinery-Kind` | The email template, for example `thread`, `run` or `signin_new` (see [Every email Diffinery sends](#every-email-diffinery-sends)) | |
| @@ -234,11 +234,11 @@ | ||
| 234 | 234 | | `push_blocked` | `[acme/website] Your push was blocked: possible secrets` | Security | `security_alert` | Push protection rejected your push (for an agent's push, its owner is told) | |
| 235 | 235 | | `push_bypassed` | `[acme/website] Push protection was bypassed` | Security | `security_alert` | A repository admin pushed past push protection; sent to the pusher and the repository's admins | |
| 236 | 236 | | `account_status` | `[Diffinery] Your account was disabled` or `Your account was enabled` | Security | `account` | A site administrator disabled your account, or enabled it again | |
| 237 | -| `invite` | `@octocat invited you to join the acme organization on Diffinery` | Account | `invitation` | Someone invited your email address (organization, repository or instance) | | |
| 238 | -| `welcome` | `Welcome to Diffinery, @octocat` | Account | `account` | You created your account from an invite | | |
| 237 | +| `invite` | `@diffy invited you to join the acme organization on Diffinery` | Account | `invitation` | Someone invited your email address (organization, repository or instance) | | |
| 238 | +| `welcome` | `Welcome to Diffinery, @diffy` | Account | `account` | You created your account from an invite | | |
| 239 | 239 | | `signin_link` | `[Diffinery] Your one-time sign-in link` | Account | `account` | A site administrator created a sign-in link for you | |
| 240 | 240 | | `test` | `[Diffinery] Test email` | Account | `account` | You clicked **Send me a test email** (or used the API) | |
| 241 | -| `invite_accepted` | `[Diffinery] @octocat accepted your invitation` | Organizations | `account` | Someone accepted an invite you created | | |
| 241 | +| `invite_accepted` | `[Diffinery] @diffy accepted your invitation` | Organizations | `account` | Someone accepted an invite you created | | |
| 242 | 242 | | `access_request` | `[Diffinery] newcomer@example.com asked for access` | Organizations | `admin` | A person waiting for an invite requested access (sent to site administrators) | |
| 243 | 243 | | `org_membership` | `[Diffinery] You're now a member of acme` | Organizations | `account` | Your organization role was added, changed or removed by an owner or admin. The email names who added you ("Added by") or who changed your role ("Changed by"). | |
| 244 | 244 | | `repo_access` | `[acme/website] You now have write access to acme/website` | Repositories | `account` | Your collaborator role on a repository was added, changed or removed | |
| @@ -249,15 +249,15 @@ | ||
| 249 | 249 | |
| 250 | 250 | | Event | Title in the email | |
| 251 | 251 | | --- | --- | |
| 252 | -| Opened | `@octocat wants to merge cache-artifacts into main` (pull request) or `@octocat opened acme/website#37` (issue); includes the description, the pull request's intent and recent commits | | |
| 253 | -| Comment | `@octocat commented on acme/website#42`, with the comment | | |
| 254 | -| Review | `@octocat approved`, `requested changes on` or `reviewed acme/website#42`, with the review and its line comments | | |
| 255 | -| Closed | `@octocat closed acme/website#37 as completed` (or `as not planned`) | | |
| 256 | -| Merged | `@octocat merged acme/website#42 into main` | | |
| 257 | -| Reopened | `@octocat reopened acme/website#37` | | |
| 258 | -| Assigned | `@octocat assigned you to acme/website#37` | | |
| 259 | -| Review requested | `@octocat requested your review on acme/website#42` | | |
| 260 | -| Pushed | `@octocat pushed 2 commits to cache-artifacts`, with the commits | | |
| 252 | +| Opened | `@diffy wants to merge cache-artifacts into main` (pull request) or `@diffy opened acme/website#37` (issue); includes the description, the pull request's intent and recent commits | | |
| 253 | +| Comment | `@diffy commented on acme/website#42`, with the comment | | |
| 254 | +| Review | `@diffy approved`, `requested changes on` or `reviewed acme/website#42`, with the review and its line comments | | |
| 255 | +| Closed | `@diffy closed acme/website#37 as completed` (or `as not planned`) | | |
| 256 | +| Merged | `@diffy merged acme/website#42 into main` | | |
| 257 | +| Reopened | `@diffy reopened acme/website#37` | | |
| 258 | +| Assigned | `@diffy assigned you to acme/website#37` | | |
| 259 | +| Review requested | `@diffy requested your review on acme/website#42` | | |
| 260 | +| Pushed | `@diffy pushed 2 commits to cache-artifacts`, with the commits | | |
| 261 | 261 | |
| 262 | 262 | ## Send a test email |
| 263 | 263 |
modifiedapps/diffinery/docs/accounts/organizations.md+6−6View file
| @@ -93,7 +93,7 @@ | ||
| 93 | 93 | The **Add people** form takes a username or an email address, like GitHub's "Add people" or "Invite member" dialog: |
| 94 | 94 | |
| 95 | 95 | 1. Open `https://diffinery.com/acme?tab=people`. |
| 96 | -2. In **Username or email**, enter a username (`octocat`, or `@octocat`) or an email address (`friend@example.com`). | |
| 96 | +2. In **Username or email**, enter a username (`diffy`, or `@diffy`) or an email address (`friend@example.com`). | |
| 97 | 97 | 3. Choose a **Role**: **Member** (default) or **Admin**. Owners can also choose **Owner**. |
| 98 | 98 | 4. Click **Add**. |
| 99 | 99 | |
| @@ -101,7 +101,7 @@ | ||
| 101 | 101 | |
| 102 | 102 | | You entered | Result | |
| 103 | 103 | | --- | --- | |
| 104 | -| The username of a person | They become a member right away, with no invitation to accept. You see "Added octocat to acme as member. We let them know." They get an email ("You're now a member of acme", naming who added them) and an in-app notification ("<your username> added you to acme as a member"). | | |
| 104 | +| The username of a person | They become a member right away, with no invitation to accept. You see "Added diffy to acme as member. We let them know." They get an email ("You're now a member of acme", naming who added them) and an in-app notification ("<your username> added you to acme as a member"). | | |
| 105 | 105 | | The email address of someone who already has an account | The same as entering their username: they are added right away. | |
| 106 | 106 | | An email address with no account | Diffinery creates an invitation and emails it. The page shows **Invitation sent to friend@example.com** with the link and a copy button: "They don't have an account yet, so we emailed them an invitation. You can also send them this link yourself. It works once and expires in 14 days: opening it creates their account and passkey and adds them here." | |
| 107 | 107 | |
| @@ -111,10 +111,10 @@ | ||
| 111 | 111 | | --- | --- | |
| 112 | 112 | | "enter a username or an email address" | The field was empty. | |
| 113 | 113 | | "enter a valid email address" | The text has an `@` but isn't a complete address such as `friend@example.com`. | |
| 114 | -| "no one has the username octocat; to invite someone new, enter their email address" | No account has that username. Enter their email address to invite them. | | |
| 114 | +| "no one has the username diffy; to invite someone new, enter their email address" | No account has that username. Enter their email address to invite them. | | |
| 115 | 115 | | "review-bot is not a person; agents belong to an organization through Settings → Agents" | Agents and organizations can't be members. Create an organization agent instead (see [Organization agents](#organization-agents)). | |
| 116 | -| "octocat's account is disabled" | A site administrator disabled the account. | | |
| 117 | -| "octocat is already a member of acme" | Change their role in the members table instead. | | |
| 116 | +| "diffy's account is disabled" | A site administrator disabled the account. | | |
| 117 | +| "diffy is already a member of acme" | Change their role in the members table instead. | | |
| 118 | 118 | | "friend@example.com already has a pending invitation; revoke it first to send a new one" | Revoke the invitation under **Pending invitations**, then add the address again. | |
| 119 | 119 | | "only owners can add owners" | Admins can add members and admins only. | |
| 120 | 120 | | "organization admins only" | Only owners, admins and site administrators can add people. | |
| @@ -131,7 +131,7 @@ | ||
| 131 | 131 | |
| 132 | 132 | ### Remove a member |
| 133 | 133 | |
| 134 | -Click **Remove** in the member's row and confirm "Remove octocat from acme?". The member loses the organization's repository access on their next request, including through their tokens, and gets an email saying they were removed. Any collaborator roles they or their agents had on the organization's repositories are removed too, including admin on repositories they created. Their personal repositories and accounts are not affected. | |
| 134 | +Click **Remove** in the member's row and confirm "Remove diffy from acme?". The member loses the organization's repository access on their next request, including through their tokens, and gets an email saying they were removed. Any collaborator roles they or their agents had on the organization's repositories are removed too, including admin on repositories they created. Their personal repositories and accounts are not affected. | |
| 135 | 135 | |
| 136 | 136 | Rules: |
| 137 | 137 |
modifiedapps/diffinery/docs/accounts/permissions.md+5−5View file
| @@ -95,20 +95,20 @@ | ||
| 95 | 95 | |
| 96 | 96 | Repository admins manage collaborators under **Settings → Collaborators** (`/acme/website/settings/access`): |
| 97 | 97 | |
| 98 | -- **Add people**: enter a **Username or email** (a person, an agent or an email address), pick a **Role** (**Read**, **Triage**, **Write**, **Maintain** or **Admin**; default **Write**) and click **Add**. Accounts get the role immediately ("octocat now has write access. We let them know."). An email address without an account gets an invitation; see [Invitations](/docs/accounts/invitations#add-people-to-a-repository). | |
| 98 | +- **Add people**: enter a **Username or email** (a person, an agent or an email address), pick a **Role** (**Read**, **Triage**, **Write**, **Maintain** or **Admin**; default **Write**) and click **Add**. Accounts get the role immediately ("diffy now has write access. We let them know."). An email address without an account gets an invitation; see [Invitations](/docs/accounts/invitations#add-people-to-a-repository). | |
| 99 | 99 | - Change a collaborator's role with the **Role** menu and **Save**, or click **Remove** and confirm. |
| 100 | 100 | |
| 101 | 101 | The person gets an email when their access is granted, changed or removed, and an in-app notification when someone adds them with **Add people**. With the API: |
| 102 | 102 | |
| 103 | 103 | ```sh |
| 104 | -# Give octocat the triage role (GitHub's "pull" and "push" also work: they mean read and write) | |
| 105 | -curl -X PUT https://diffinery.com/api/v3/repos/acme/website/collaborators/octocat \ | |
| 104 | +# Give diffy the triage role (GitHub's "pull" and "push" also work: they mean read and write) | |
| 105 | +curl -X PUT https://diffinery.com/api/v3/repos/acme/website/collaborators/diffy \ | |
| 106 | 106 | -H "Authorization: Bearer dfy_..." \ |
| 107 | 107 | -H "Content-Type: application/json" \ |
| 108 | 108 | -d '{"permission": "triage"}' |
| 109 | 109 | |
| 110 | -# Remove octocat | |
| 111 | -curl -X DELETE https://diffinery.com/api/v3/repos/acme/website/collaborators/octocat \ | |
| 110 | +# Remove diffy | |
| 111 | +curl -X DELETE https://diffinery.com/api/v3/repos/acme/website/collaborators/diffy \ | |
| 112 | 112 | -H "Authorization: Bearer dfy_..." |
| 113 | 113 | ``` |
| 114 | 114 |
modifiedapps/diffinery/docs/accounts/profile-and-preferences.md+6−6View file
| @@ -29,7 +29,7 @@ | ||
| 29 | 29 | |
| 30 | 30 | | Field | Editable | Notes | |
| 31 | 31 | | --- | --- | --- | |
| 32 | -| **Username** | Yes | Your login, the owner part of your repository URLs (`https://diffinery.com/octocat/...`) and your `@mention` handle | | |
| 32 | +| **Username** | Yes | Your login, the owner part of your repository URLs (`https://diffinery.com/diffy/...`) and your `@mention` handle | | |
| 33 | 33 | | **Display name** | Yes | Optional. Shown on your profile page and in the settings sidebar, with your username under it, and returned as `name` by the API. | |
| 34 | 34 | | **Email** | No | Your account's email address. Notification emails go here. It can't be changed in Settings. | |
| 35 | 35 | | **Account type** | No | `user` for a person | |
| @@ -38,7 +38,7 @@ | ||
| 38 | 38 | |
| 39 | 39 | Change the username or display name and click **Save profile**. You see "Profile saved." |
| 40 | 40 | |
| 41 | -Your public profile page is `https://diffinery.com/octocat`. It shows your picture, display name, username, your organizations and the repositories the viewer can see. On your own profile page there is an **Edit profile** button that opens **Settings → Profile**. Profile pages need the viewer to be signed in. | |
| 41 | +Your public profile page is `https://diffinery.com/diffy`. It shows your picture, display name, username, your organizations and the repositories the viewer can see. On your own profile page there is an **Edit profile** button that opens **Settings → Profile**. Profile pages need the viewer to be signed in. | |
| 42 | 42 | |
| 43 | 43 | ### Change your username |
| 44 | 44 | |
| @@ -141,7 +141,7 @@ | ||
| 141 | 141 | ``` |
| 142 | 142 | |
| 143 | 143 | ```json |
| 144 | -{ "avatar_url": "https://diffinery.com/api/avatars/octocat?v=1760350000" } | |
| 144 | +{ "avatar_url": "https://diffinery.com/api/avatars/diffy?v=1760350000" } | |
| 145 | 145 | ``` |
| 146 | 146 | |
| 147 | 147 | The `v` value is the new picture's version. Upload an organization's picture: |
| @@ -159,7 +159,7 @@ | ||
| 159 | 159 | ``` |
| 160 | 160 | |
| 161 | 161 | ```json |
| 162 | -{ "avatar_url": "https://diffinery.com/api/avatars/octocat" } | |
| 162 | +{ "avatar_url": "https://diffinery.com/api/avatars/diffy" } | |
| 163 | 163 | ``` |
| 164 | 164 | |
| 165 | 165 | The `diffinery api` CLI command sends text bodies only, so use `curl` (or another HTTP client) to upload a picture. |
| @@ -198,8 +198,8 @@ | ||
| 198 | 198 | | `v` | A picture version, as returned by the upload API. Pins the URL to that picture so it can be cached for a long time. | none | |
| 199 | 199 | |
| 200 | 200 | ```sh |
| 201 | -# The 64-pixel picture of octocat | |
| 202 | -curl -o octocat.webp "https://diffinery.com/api/avatars/octocat?s=64" | |
| 201 | +# The 64-pixel picture of diffy | |
| 202 | +curl -o diffy.webp "https://diffinery.com/api/avatars/diffy?s=64" | |
| 203 | 203 | ``` |
| 204 | 204 | |
| 205 | 205 | The response is `image/webp` for an uploaded picture, or `image/svg+xml` for initials. The URL needs no sign-in or token, so you can use it in `<img>` tags, README files and other tools. A name that doesn't exist also gets an initials picture, so the URL doesn't reveal which accounts exist. |
modifiedapps/diffinery/docs/accounts/tokens.md+1−1View file
| @@ -170,7 +170,7 @@ | ||
| 170 | 170 | |
| 171 | 171 | ```sh |
| 172 | 172 | git clone https://diffinery.com/acme/website.git |
| 173 | -# Username: octocat (anything works) | |
| 173 | +# Username: diffy (anything works) | |
| 174 | 174 | # Password: dfy_... |
| 175 | 175 | ``` |
| 176 | 176 |
modifiedapps/diffinery/docs/actions/environments.md+4−4View file
| @@ -528,7 +528,7 @@ | ||
| 528 | 528 | "original_environment": "production", |
| 529 | 529 | "environment": "production", |
| 530 | 530 | "description": "Deploy 1.4.0", |
| 531 | - "creator": { "login": "octocat", "type": "User" }, | |
| 531 | + "creator": { "login": "diffy", "type": "User" }, | |
| 532 | 532 | "created_at": "2026-10-13T09:30:00Z", |
| 533 | 533 | "updated_at": "2026-10-13T09:30:00Z", |
| 534 | 534 | "statuses_url": "https://diffinery.com/api/v3/repos/acme/website/deployments/7/statuses", |
| @@ -610,7 +610,7 @@ | ||
| 610 | 610 | "id": 15, |
| 611 | 611 | "node_id": "RGVwbG95bWVudFN0YXR1czphY21lL3dlYnNpdGUvMTU", |
| 612 | 612 | "state": "success", |
| 613 | - "creator": { "login": "octocat", "type": "User" }, | |
| 613 | + "creator": { "login": "diffy", "type": "User" }, | |
| 614 | 614 | "description": "Deployed", |
| 615 | 615 | "environment": "production", |
| 616 | 616 | "target_url": "https://ci.example.com/builds/812", |
| @@ -676,7 +676,7 @@ | ||
| 676 | 676 | "created_at": "2026-10-13T09:30:00.000Z" |
| 677 | 677 | }, |
| 678 | 678 | "repository": { "full_name": "acme/website" }, |
| 679 | - "sender": { "login": "octocat", "type": "User" } | |
| 679 | + "sender": { "login": "diffy", "type": "User" } | |
| 680 | 680 | } |
| 681 | 681 | ``` |
| 682 | 682 | |
| @@ -700,7 +700,7 @@ | ||
| 700 | 700 | }, |
| 701 | 701 | "deployment": { "id": 7, "sha": "9fceb02d0ae598e95dc970b74767f19372d61af8", "ref": "main", "task": "deploy", "environment": "production" }, |
| 702 | 702 | "repository": { "full_name": "acme/website" }, |
| 703 | - "sender": { "login": "octocat", "type": "User" } | |
| 703 | + "sender": { "login": "diffy", "type": "User" } | |
| 704 | 704 | } |
| 705 | 705 | ``` |
| 706 | 706 |
modifiedapps/diffinery/docs/actions/oidc.md+1−1View file
| @@ -93,7 +93,7 @@ | ||
| 93 | 93 | | `workflow` | `Deploy` | The workflow's `name`, or its file path when it has none. | |
| 94 | 94 | | `event_name` | `push` | The event that started the run. | |
| 95 | 95 | | `run_id` | `01J9Z...` | Diffinery's run id (an opaque string, not a number). | |
| 96 | -| `actor` | `octocat` | Who started the run. | | |
| 96 | +| `actor` | `diffy` | Who started the run. | | |
| 97 | 97 | | `job_workflow_ref` | `acme/website/.github/workflows/deploy.yml@refs/heads/main` | The run's top-level workflow file and ref. | |
| 98 | 98 | |
| 99 | 99 | The token header is `{"alg": "ES256", "typ": "JWT", "kid": "..."}`. |
modifiedapps/diffinery/docs/admin/site-administration.md+3−3View file
| @@ -76,7 +76,7 @@ | ||
| 76 | 76 | - agents they own stop working, because an agent can never do more than its owner, |
| 77 | 77 | - they get a "Your account was disabled" email. |
| 78 | 78 | |
| 79 | -Their repositories, organizations and memberships stay as they are, but they can't be added to organizations or repositories while disabled ("octocat's account is disabled"). Set the status back to **Active** to enable the account; the person gets "Your account was enabled" and signs in with their passkey again. Their old tokens stay revoked, so they need to create new ones. | |
| 79 | +Their repositories, organizations and memberships stay as they are, but they can't be added to organizations or repositories while disabled ("diffy's account is disabled"). Set the status back to **Active** to enable the account; the person gets "Your account was enabled" and signs in with their passkey again. Their old tokens stay revoked, so they need to create new ones. | |
| 80 | 80 | |
| 81 | 81 | Every status change is recorded in the audit log as `user.active`, `user.pending` or `user.disabled`. |
| 82 | 82 | |
| @@ -91,8 +91,8 @@ | ||
| 91 | 91 | When someone loses their passkeys, a site administrator can give them a one-time link that adds a new passkey to their existing account. |
| 92 | 92 | |
| 93 | 93 | 1. In the **Users** table, click **Sign-in link** next to the person. |
| 94 | -2. Confirm "Create a one-time link that adds a passkey to octocat? Only send it to them." | |
| 95 | -3. The page shows **Sign-in link for octocat** with the link and a copy button. Diffinery has already emailed it to the person ("Your one-time sign-in link"); you can also send it yourself through a channel you trust. | |
| 94 | +2. Confirm "Create a one-time link that adds a passkey to diffy? Only send it to them." | |
| 95 | +3. The page shows **Sign-in link for diffy** with the link and a copy button. Diffinery has already emailed it to the person ("Your one-time sign-in link"); you can also send it yourself through a channel you trust. | |
| 96 | 96 | |
| 97 | 97 | The person opens the link, creates a passkey and is signed in. See [Passkeys and sign-in](/docs/accounts/passkeys-and-sign-in#sign-in-link-from-an-administrator) for their side. |
| 98 | 98 |
modifiedapps/diffinery/docs/agents/overview.md+2−2View file
| @@ -142,7 +142,7 @@ | ||
| 142 | 142 | |
| 143 | 143 | ### Commits |
| 144 | 144 | |
| 145 | -Commits that Diffinery writes for an agent are stamped with an extra header naming the agent and its owner, `diffinery-agent review-bot on-behalf-of octocat`. This covers commits made through: | |
| 145 | +Commits that Diffinery writes for an agent are stamped with an extra header naming the agent and its owner, `diffinery-agent review-bot on-behalf-of diffy`. This covers commits made through: | |
| 146 | 146 | |
| 147 | 147 | - the `commit_files` MCP tool and `POST /repos/{owner}/{repo}/diffinery/commits`; |
| 148 | 148 | - the contents API (`PUT` and `DELETE /repos/{owner}/{repo}/contents/{path}`); |
| @@ -162,7 +162,7 @@ | ||
| 162 | 162 | parent 51c0e2aa... |
| 163 | 163 | author review-bot <review-bot@users.noreply.diffinery.com> 1791883964 +0000 |
| 164 | 164 | committer review-bot <review-bot@users.noreply.diffinery.com> 1791883964 +0000 |
| 165 | -diffinery-agent review-bot on-behalf-of octocat | |
| 165 | +diffinery-agent review-bot on-behalf-of diffy | |
| 166 | 166 | |
| 167 | 167 | Fix the Contact sales link |
| 168 | 168 | ``` |
modifiedapps/diffinery/docs/collaboration/issues.md+9−9View file
| @@ -72,7 +72,7 @@ | ||
| 72 | 72 | --title "Broken link on pricing page" \ |
| 73 | 73 | --body "The *Contact sales* link returns 404." \ |
| 74 | 74 | --label bug --label website \ |
| 75 | - --assignee octocat | |
| 75 | + --assignee diffy | |
| 76 | 76 | ``` |
| 77 | 77 | |
| 78 | 78 | | Flag | Meaning | |
| @@ -93,7 +93,7 @@ | ||
| 93 | 93 | curl -X POST https://diffinery.com/api/v3/repos/acme/website/issues \ |
| 94 | 94 | -H "Authorization: Bearer dfy_..." \ |
| 95 | 95 | -H "Content-Type: application/json" \ |
| 96 | - -d '{"title": "Broken link on pricing page", "body": "The *Contact sales* link returns 404.", "labels": ["bug"], "assignees": ["octocat"]}' | |
| 96 | + -d '{"title": "Broken link on pricing page", "body": "The *Contact sales* link returns 404.", "labels": ["bug"], "assignees": ["diffy"]}' | |
| 97 | 97 | ``` |
| 98 | 98 | |
| 99 | 99 | The response (`201 Created`) is GitHub's issue object: `id` and `number` (both the issue number), `title`, `body`, `state`, `state_reason`, `locked`, `active_lock_reason`, `user` (`login`, `id`, and `type` `User` or `Bot`), `labels` (label objects with `id`, `name`, `color`, `description`), `assignee` and `assignees` (user objects), `comments`, `reactions` (counts), `created_at`, `updated_at`, `closed_at`, `html_url` and API URLs such as `comments_url`, `events_url` and `timeline_url`. `assignee` (a single login) is accepted in place of `assignees`, and `labels` may be names or `{ "name": ... }` objects. |
| @@ -189,7 +189,7 @@ | ||
| 189 | 189 | An issue can have several assignees. Assigned people are notified and follow the thread from then on. |
| 190 | 190 | |
| 191 | 191 | - **Web UI (triage or higher):** in the sidebar under **Assignees**, click **Edit assignees**, type logins separated by commas or spaces (a leading `@` is ignored, at most 10), and click **Save**. Leave the box empty to remove everyone. |
| 192 | -- **CLI:** `diffinery issue create --assignee octocat`. | |
| 192 | +- **CLI:** `diffinery issue create --assignee diffy`. | |
| 193 | 193 | - **REST API, whole list:** send the complete list in `assignees` (or a single `assignee`; `"assignee": null` clears them) on `POST .../issues` or `PATCH .../issues/{number}`. |
| 194 | 194 | - **REST API, add or remove (triage or higher):** |
| 195 | 195 | |
| @@ -197,7 +197,7 @@ | ||
| 197 | 197 | # Add assignees (returns the issue, 201) |
| 198 | 198 | curl -X POST https://diffinery.com/api/v3/repos/acme/website/issues/12/assignees \ |
| 199 | 199 | -H "Authorization: Bearer dfy_..." -H "Content-Type: application/json" \ |
| 200 | - -d '{"assignees": ["octocat", "review-bot"]}' | |
| 200 | + -d '{"assignees": ["diffy", "review-bot"]}' | |
| 201 | 201 | |
| 202 | 202 | # Remove assignees (returns the issue) |
| 203 | 203 | curl -X DELETE https://diffinery.com/api/v3/repos/acme/website/issues/12/assignees \ |
| @@ -409,13 +409,13 @@ | ||
| 409 | 409 | Filters are query parameters, so you can bookmark or share them: |
| 410 | 410 | |
| 411 | 411 | ```text |
| 412 | -https://diffinery.com/acme/website/issues?state=closed&label=bug&author=octocat&q=pricing | |
| 412 | +https://diffinery.com/acme/website/issues?state=closed&label=bug&author=diffy&q=pricing | |
| 413 | 413 | ``` |
| 414 | 414 | |
| 415 | 415 | ### List issues with the CLI |
| 416 | 416 | |
| 417 | 417 | ```sh |
| 418 | -diffinery issue list -R acme/website --state all --label bug --author octocat --search pricing --limit 50 | |
| 418 | +diffinery issue list -R acme/website --state all --label bug --author diffy --search pricing --limit 50 | |
| 419 | 419 | diffinery issue view 12 |
| 420 | 420 | ``` |
| 421 | 421 | |
| @@ -433,7 +433,7 @@ | ||
| 433 | 433 | |
| 434 | 434 | ```sh |
| 435 | 435 | curl -H "Authorization: Bearer dfy_..." \ |
| 436 | - "https://diffinery.com/api/v3/repos/acme/website/issues?state=all&labels=bug&creator=octocat&q=pricing&per_page=50&page=1" | |
| 436 | + "https://diffinery.com/api/v3/repos/acme/website/issues?state=all&labels=bug&creator=diffy&q=pricing&per_page=50&page=1" | |
| 437 | 437 | ``` |
| 438 | 438 | |
| 439 | 439 | | Parameter | Meaning | |
| @@ -476,8 +476,8 @@ | ||
| 476 | 476 | | `is:locked`, `is:unlocked` | Locked conversations or not | |
| 477 | 477 | | `label:bug`, `label:bug,ui` | Has these labels (all of them); `-label:` excludes | |
| 478 | 478 | | `no:label`, `no:assignee` | Has no labels, or no assignees | |
| 479 | -| `author:octocat`, `-author:review-bot` | Opened by, or not by, this login | | |
| 480 | -| `assignee:octocat` | Assigned to this login | | |
| 479 | +| `author:diffy`, `-author:review-bot` | Opened by, or not by, this login | | |
| 480 | +| `assignee:diffy` | Assigned to this login | | |
| 481 | 481 | | `head:fix-pricing-link`, `base:main` | Pull requests by head or base branch | |
| 482 | 482 | | `in:title`, `in:body`, `in:comments` | Where words must appear (default: title and body); combine with commas | |
| 483 | 483 | | `created:`, `updated:`, `closed:` | Date ranges: `>2026-09-01`, `>=`, `<`, `<=`, `2026-09-01..2026-09-30`, `2026-09-01..*`, or one day | |
modifiedapps/diffinery/docs/collaboration/merge-queue.md+2−2View file
| @@ -161,7 +161,7 @@ | ||
| 161 | 161 | "head_sha": "3f2a9c1e...", |
| 162 | 162 | "merge_method": "squash", |
| 163 | 163 | "delete_branch": true, |
| 164 | - "enqueued_by": { "login": "octocat" }, | |
| 164 | + "enqueued_by": { "login": "diffy" }, | |
| 165 | 165 | "enqueued_at": "2026-10-13T09:12:44.000Z", |
| 166 | 166 | "merge_group": { |
| 167 | 167 | "head_sha": "9be41d07...", |
| @@ -229,7 +229,7 @@ | ||
| 229 | 229 | | `main no longer uses a merge queue` | The merge queue was turned off for the branch. | |
| 230 | 230 | | `the base branch main no longer exists` | The base branch was deleted. | |
| 231 | 231 | | `the pull request was closed` | No comment is posted. | |
| 232 | -| `octocat removed it from the queue` | Someone removed it by hand. No comment is posted. | | |
| 232 | +| `diffy removed it from the queue` | Someone removed it by hand. No comment is posted. | | |
| 233 | 233 | |
| 234 | 234 | When a pull request leaves, its merge group branch is deleted and its unfinished runs are cancelled with `Cancelled because its merge group was rebuilt or left the queue.` Fix the problem, wait for the pull request's own checks, and add it to the queue again. |
| 235 | 235 |
modifiedapps/diffinery/docs/collaboration/pull-requests.md+6−6View file
| @@ -77,7 +77,7 @@ | ||
| 77 | 77 | --title "Fix the Contact sales link" \ |
| 78 | 78 | --intent "Point the pricing page's Contact sales link at /contact; no other behaviour changes." \ |
| 79 | 79 | --body "Fixes #12" \ |
| 80 | - --reviewer octocat | |
| 80 | + --reviewer diffy | |
| 81 | 81 | ``` |
| 82 | 82 | |
| 83 | 83 | | Flag | Meaning | |
| @@ -105,7 +105,7 @@ | ||
| 105 | 105 | "body": "Fixes #12", |
| 106 | 106 | "intent": "Point the pricing page'\''s Contact sales link at /contact; no other behaviour changes.", |
| 107 | 107 | "draft": false, |
| 108 | - "reviewers": ["octocat"] | |
| 108 | + "reviewers": ["diffy"] | |
| 109 | 109 | }' |
| 110 | 110 | ``` |
| 111 | 111 | |
| @@ -327,7 +327,7 @@ | ||
| 327 | 327 | ```sh |
| 328 | 328 | curl -X POST https://diffinery.com/api/v3/repos/acme/website/pulls/12/requested_reviewers \ |
| 329 | 329 | -H "Authorization: Bearer dfy_..." -H "Content-Type: application/json" \ |
| 330 | - -d '{"reviewers": ["octocat", "review-bot"]}' | |
| 330 | + -d '{"reviewers": ["diffy", "review-bot"]}' | |
| 331 | 331 | ``` |
| 332 | 332 | |
| 333 | 333 | Requested reviewers are notified and appear in the sidebar's **Reviewers** list as `pending` until they submit a review. Logins aren't checked. Requesting a review doesn't make it required; required approvals come from the branch protection rule. `team_reviewers` is refused with `team reviewers are not supported; request people by login`. |
| @@ -457,7 +457,7 @@ | ||
| 457 | 457 | 3. Leave **Delete fix-pricing-link after merge** ticked to delete the head branch, or untick it. |
| 458 | 458 | 4. Click **Merge pull request**. |
| 459 | 459 | |
| 460 | -The timeline then shows `octocat merged commit abc1234 into main`. | |
| 460 | +The timeline then shows `diffy merged commit abc1234 into main`. | |
| 461 | 461 | |
| 462 | 462 | ### Merge with the CLI |
| 463 | 463 | |
| @@ -563,7 +563,7 @@ | ||
| 563 | 563 | | `pull request is a draft` | Drafts can't be merged. See [Drafts](#drafts). | |
| 564 | 564 | | `merge conflicts in N file(s)` | Resolve the conflicts and push. See [Conflicts](#conflicts). | |
| 565 | 565 | | `needs N more approving review(s)` | Get more approvals from people with write access. Agent approvals don't count. | |
| 566 | -| `changes requested by octocat` | That reviewer must approve before merging. | | |
| 566 | +| `changes requested by diffy` | That reviewer must approve before merging. | | |
| 567 | 567 | | `required check 'CI / test' has not run` | No counted check run or status with that exact name was reported on the head commit. Check the workflow's trigger and the check name. Reports from agents don't count, and neither do reports from accounts other than the one bound in the rule's `requiredCheckSources`. | |
| 568 | 568 | | `required check 'CI / test' is queued` (or `is in_progress`) | Wait for it to finish. A `pending` commit status shows as `is in_progress`. | |
| 569 | 569 | | `required check 'CI / test' failure` (or another conclusion such as `cancelled`, `timed_out` or `action_required`) | The check didn't pass. Fix the code or re-run the workflow. | |
| @@ -646,7 +646,7 @@ | ||
| 646 | 646 | The **Pull requests** tab lists pull requests with the same filters as the issue list: open or closed, search, label and author. See [Issues](/docs/collaboration/issues#find-issues). |
| 647 | 647 | |
| 648 | 648 | ```sh |
| 649 | -diffinery pr list --state merged --author octocat --limit 20 | |
| 649 | +diffinery pr list --state merged --author diffy --limit 20 | |
| 650 | 650 | diffinery pr view 12 --comments |
| 651 | 651 | diffinery pr diff 12 --name-only |
| 652 | 652 | ``` |
modifiedapps/diffinery/docs/collaboration/releases.md+14−14View file
| @@ -124,15 +124,15 @@ | ||
| 124 | 124 | "html_url": "https://diffinery.com/acme/website/releases/tag/v1.2.0", |
| 125 | 125 | "id": 7, |
| 126 | 126 | "author": { |
| 127 | - "login": "octocat", | |
| 127 | + "login": "diffy", | |
| 128 | 128 | "id": 7220136606554077, |
| 129 | 129 | "node_id": "VXNlcjphMWIyYzNkNGU1ZjYwNzE4MjkzYTRiNWM2ZDdlOGY5MA", |
| 130 | - "avatar_url": "https://diffinery.com/api/avatars/octocat", | |
| 130 | + "avatar_url": "https://diffinery.com/api/avatars/diffy", | |
| 131 | 131 | "gravatar_id": "", |
| 132 | - "url": "https://diffinery.com/api/v3/users/octocat", | |
| 133 | - "html_url": "https://diffinery.com/octocat", | |
| 134 | - "repos_url": "https://diffinery.com/api/v3/users/octocat/repos", | |
| 135 | - "organizations_url": "https://diffinery.com/api/v3/users/octocat/orgs", | |
| 132 | + "url": "https://diffinery.com/api/v3/users/diffy", | |
| 133 | + "html_url": "https://diffinery.com/diffy", | |
| 134 | + "repos_url": "https://diffinery.com/api/v3/users/diffy/repos", | |
| 135 | + "organizations_url": "https://diffinery.com/api/v3/users/diffy/orgs", | |
| 136 | 136 | "type": "User", |
| 137 | 137 | "user_view_type": "public", |
| 138 | 138 | "site_admin": false |
| @@ -150,7 +150,7 @@ | ||
| 150 | 150 | "assets": [], |
| 151 | 151 | "tarball_url": "https://diffinery.com/api/v3/repos/acme/website/tarball/v1.2.0", |
| 152 | 152 | "zipball_url": "https://diffinery.com/api/v3/repos/acme/website/zipball/v1.2.0", |
| 153 | - "body": "## What's Changed\n* Fix broken footer links by @octocat in https://diffinery.com/acme/website/pull/41\n\n**Full Changelog**: https://diffinery.com/acme/website/compare/v1.1.0...v1.2.0", | |
| 153 | + "body": "## What's Changed\n* Fix broken footer links by @diffy in https://diffinery.com/acme/website/pull/41\n\n**Full Changelog**: https://diffinery.com/acme/website/compare/v1.1.0...v1.2.0", | |
| 154 | 154 | "reactions": { "url": "https://diffinery.com/api/v3/repos/acme/website/releases/7/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "confused": 0, "heart": 0, "hooray": 0, "rocket": 0, "eyes": 0 }, |
| 155 | 155 | "latest": true |
| 156 | 156 | } |
| @@ -253,7 +253,7 @@ | ||
| 253 | 253 | ```json |
| 254 | 254 | { |
| 255 | 255 | "name": "v1.2.0", |
| 256 | - "body": "## What's Changed\n### New Features\n* Add dark mode by @octocat in https://diffinery.com/acme/website/pull/40\n\n### Bug Fixes\n* Fix broken footer links by @octocat in https://diffinery.com/acme/website/pull/41\n\n**Full Changelog**: https://diffinery.com/acme/website/compare/v1.1.0...v1.2.0" | |
| 256 | + "body": "## What's Changed\n### New Features\n* Add dark mode by @diffy in https://diffinery.com/acme/website/pull/40\n\n### Bug Fixes\n* Fix broken footer links by @diffy in https://diffinery.com/acme/website/pull/41\n\n**Full Changelog**: https://diffinery.com/acme/website/compare/v1.1.0...v1.2.0" | |
| 257 | 257 | } |
| 258 | 258 | ``` |
| 259 | 259 | |
| @@ -334,15 +334,15 @@ | ||
| 334 | 334 | "name": "website-linux-amd64.tar.gz", |
| 335 | 335 | "label": "Linux build", |
| 336 | 336 | "uploader": { |
| 337 | - "login": "octocat", | |
| 337 | + "login": "diffy", | |
| 338 | 338 | "id": 7220136606554077, |
| 339 | 339 | "node_id": "VXNlcjphMWIyYzNkNGU1ZjYwNzE4MjkzYTRiNWM2ZDdlOGY5MA", |
| 340 | - "avatar_url": "https://diffinery.com/api/avatars/octocat", | |
| 340 | + "avatar_url": "https://diffinery.com/api/avatars/diffy", | |
| 341 | 341 | "gravatar_id": "", |
| 342 | - "url": "https://diffinery.com/api/v3/users/octocat", | |
| 343 | - "html_url": "https://diffinery.com/octocat", | |
| 344 | - "repos_url": "https://diffinery.com/api/v3/users/octocat/repos", | |
| 345 | - "organizations_url": "https://diffinery.com/api/v3/users/octocat/orgs", | |
| 342 | + "url": "https://diffinery.com/api/v3/users/diffy", | |
| 343 | + "html_url": "https://diffinery.com/diffy", | |
| 344 | + "repos_url": "https://diffinery.com/api/v3/users/diffy/repos", | |
| 345 | + "organizations_url": "https://diffinery.com/api/v3/users/diffy/orgs", | |
| 346 | 346 | "type": "User", |
| 347 | 347 | "user_view_type": "public", |
| 348 | 348 | "site_admin": false |
modifiedapps/diffinery/docs/concepts.md+1−1View file
| @@ -7,7 +7,7 @@ | ||
| 7 | 7 | |
| 8 | 8 | ## Accounts |
| 9 | 9 | |
| 10 | -Every action on Diffinery is taken by an account. There are three kinds: users, organizations and agents. All three share one namespace, so `https://diffinery.com/octocat`, `https://diffinery.com/acme` and `https://diffinery.com/review-bot` are all account pages, and repositories live under users and organizations. | |
| 10 | +Every action on Diffinery is taken by an account. There are three kinds: users, organizations and agents. All three share one namespace, so `https://diffinery.com/diffy`, `https://diffinery.com/acme` and `https://diffinery.com/review-bot` are all account pages, and repositories live under users and organizations. | |
| 11 | 11 | |
| 12 | 12 | ### Users |
| 13 | 13 |
modifiedapps/diffinery/docs/migrate-from-github.md+2−2View file
| @@ -57,12 +57,12 @@ | ||
| 57 | 57 | Everything created on Diffinery is created by you (the token's account), with new timestamps. Each issue, pull request and comment starts with an attribution line that names the original author and date and links back to GitHub: |
| 58 | 58 | |
| 59 | 59 | ```text |
| 60 | -> Imported from GitHub issue [#12](https://github.com/acme/website/issues/12) by @octocat on 2026-03-01 | |
| 60 | +> Imported from GitHub issue [#12](https://github.com/acme/website/issues/12) by @diffy on 2026-03-01 | |
| 61 | 61 | |
| 62 | 62 | The original description follows here. |
| 63 | 63 | ``` |
| 64 | 64 | |
| 65 | -Comments start with `> Imported from GitHub: comment by @octocat on 2026-03-02`. | |
| 65 | +Comments start with `> Imported from GitHub: comment by @diffy on 2026-03-02`. | |
| 66 | 66 | |
| 67 | 67 | ### What it doesn't copy |
| 68 | 68 |
modifiedapps/diffinery/docs/packages/container-registry.md+10−10View file
| @@ -40,7 +40,7 @@ | ||
| 40 | 40 | A token restricted to some repositories only reaches packages linked to one of those repositories, plus public packages, which anyone can pull. |
| 41 | 41 | |
| 42 | 42 | ```sh |
| 43 | -echo "$DIFFINERY_TOKEN" | docker login diffinery.com -u octocat --password-stdin | |
| 43 | +echo "$DIFFINERY_TOKEN" | docker login diffinery.com -u diffy --password-stdin | |
| 44 | 44 | ``` |
| 45 | 45 | |
| 46 | 46 | ```text |
| @@ -50,8 +50,8 @@ | ||
| 50 | 50 | The same works with other clients: |
| 51 | 51 | |
| 52 | 52 | ```sh |
| 53 | -echo "$DIFFINERY_TOKEN" | podman login diffinery.com -u octocat --password-stdin | |
| 54 | -crane auth login diffinery.com -u octocat -p "$DIFFINERY_TOKEN" | |
| 53 | +echo "$DIFFINERY_TOKEN" | podman login diffinery.com -u diffy --password-stdin | |
| 54 | +crane auth login diffinery.com -u diffy -p "$DIFFINERY_TOKEN" | |
| 55 | 55 | ``` |
| 56 | 56 | |
| 57 | 57 | Without credentials, the registry answers `401 UNAUTHORIZED: sign in with a Diffinery token: docker login diffinery.com` on `/v2/`. Pulling a public package doesn't need a sign-in. |
| @@ -365,10 +365,10 @@ | ||
| 365 | 365 | |
| 366 | 366 | ```sh |
| 367 | 367 | # Remove one tag; the version stays, untagged |
| 368 | -curl -X DELETE -u octocat:dfy_... https://diffinery.com/v2/acme/website/manifests/1.4.0 | |
| 368 | +curl -X DELETE -u diffy:dfy_... https://diffinery.com/v2/acme/website/manifests/1.4.0 | |
| 369 | 369 | |
| 370 | 370 | # Delete a version and every tag pointing at it |
| 371 | -curl -X DELETE -u octocat:dfy_... https://diffinery.com/v2/acme/website/manifests/sha256:4f9a... | |
| 371 | +curl -X DELETE -u diffy:dfy_... https://diffinery.com/v2/acme/website/manifests/sha256:4f9a... | |
| 372 | 372 | ``` |
| 373 | 373 | |
| 374 | 374 | Both return `202 Accepted`. Tools such as `crane delete` and `regctl` use these calls. |
| @@ -442,7 +442,7 @@ | ||
| 442 | 442 | "media_type": "application/vnd.oci.image.index.v1+json", |
| 443 | 443 | "size": 48213377, |
| 444 | 444 | "platforms": ["linux/amd64", "linux/arm64"], |
| 445 | - "pushed_by": "octocat", | |
| 445 | + "pushed_by": "diffy", | |
| 446 | 446 | "metadata": { "package_type": "container", "container": { "tags": ["1.4.0", "latest"] } } |
| 447 | 447 | } |
| 448 | 448 | ``` |
| @@ -487,7 +487,7 @@ | ||
| 487 | 487 | ```sh |
| 488 | 488 | kubectl create secret docker-registry diffinery \ |
| 489 | 489 | --docker-server=diffinery.com \ |
| 490 | - --docker-username=octocat \ | |
| 490 | + --docker-username=diffy \ | |
| 491 | 491 | --docker-password=dfy_... |
| 492 | 492 | ``` |
| 493 | 493 | |
| @@ -517,8 +517,8 @@ | ||
| 517 | 517 | To copy images with all their platforms, use `crane copy` from a machine signed in to both registries. This works when every layer is under 100 MB: |
| 518 | 518 | |
| 519 | 519 | ```sh |
| 520 | -crane auth login ghcr.io -u octocat -p "$GITHUB_PAT" | |
| 521 | -crane auth login diffinery.com -u octocat -p "$DIFFINERY_TOKEN" | |
| 520 | +crane auth login ghcr.io -u diffy -p "$GITHUB_PAT" | |
| 521 | +crane auth login diffinery.com -u diffy -p "$DIFFINERY_TOKEN" | |
| 522 | 522 | crane copy ghcr.io/acme/website:1.4.0 diffinery.com/acme/website:1.4.0 |
| 523 | 523 | ``` |
| 524 | 524 | |
| @@ -539,7 +539,7 @@ | ||
| 539 | 539 | permissions: |
| 540 | 540 | packages: write |
| 541 | 541 | steps: |
| 542 | - - run: echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u octocat --password-stdin | |
| 542 | + - run: echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u diffy --password-stdin | |
| 543 | 543 | - run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login diffinery.com -u "${{ github.actor }}" --password-stdin |
| 544 | 544 | - run: | |
| 545 | 545 | docker pull "ghcr.io/acme/website:${{ inputs.tag }}" |
modifiedapps/diffinery/docs/quickstart.md+2−2View file
| @@ -5,7 +5,7 @@ | ||
| 5 | 5 | |
| 6 | 6 | This guide takes you from an invite email to a repository with code, a passing workflow, a merged pull request, a first release and an AI agent connected over MCP. It takes about 15 minutes. Each step shows the web UI and, where it exists, the `diffinery` CLI and the REST API. |
| 7 | 7 | |
| 8 | -The examples use the organization `acme`, the repository `acme/website`, the user `octocat` and the agent `review-bot`. Replace them with your own names. | |
| 8 | +The examples use the organization `acme`, the repository `acme/website`, the user `diffy` and the agent `review-bot`. Replace them with your own names. | |
| 9 | 9 | |
| 10 | 10 | ## What you need |
| 11 | 11 | |
| @@ -56,7 +56,7 @@ | ||
| 56 | 56 | |
| 57 | 57 | ```sh |
| 58 | 58 | diffinery login # paste the dfy_ token when asked |
| 59 | -diffinery whoami # prints octocat | |
| 59 | +diffinery whoami # prints diffy | |
| 60 | 60 | diffinery auth setup-git # git clone/fetch/push to diffinery.com now use the token |
| 61 | 61 | ``` |
| 62 | 62 |
modifiedapps/diffinery/docs/reference/rest-api.md+4−4View file
| @@ -113,13 +113,13 @@ | ||
| 113 | 113 | | --- | --- | --- | |
| 114 | 114 | | `Bearer` | `Authorization: Bearer dfy_...` | curl, fetch, MCP clients, the Diffinery CLI | |
| 115 | 115 | | `token` | `Authorization: token dfy_...` | Octokit and other GitHub libraries | |
| 116 | -| `Basic` | `Authorization: Basic base64(octocat:dfy_...)` | git, `curl -u`, Docker | | |
| 116 | +| `Basic` | `Authorization: Basic base64(diffy:dfy_...)` | git, `curl -u`, Docker | | |
| 117 | 117 | |
| 118 | 118 | With `Basic`, Diffinery takes the password as the token and ignores the username, so any username works (`x-token`, your login, anything). If the password is empty, the username is used as the token. |
| 119 | 119 | |
| 120 | 120 | ```sh |
| 121 | 121 | curl -H "Authorization: Bearer dfy_..." https://diffinery.com/api/v3/user |
| 122 | -curl -u octocat:dfy_... https://diffinery.com/api/v3/user | |
| 122 | +curl -u diffy:dfy_... https://diffinery.com/api/v3/user | |
| 123 | 123 | ``` |
| 124 | 124 | |
| 125 | 125 | Inside a workflow job, the job's `GITHUB_TOKEN` can read its own repository through the API, with the read role. |
| @@ -516,8 +516,8 @@ | ||
| 516 | 516 | | `label:bug` | Has this label. `label:a,b` and repeated `label:` qualifiers require every label. | |
| 517 | 517 | | `-label:wontfix` | Doesn't have this label | |
| 518 | 518 | | `no:label`, `no:assignee` | Has no labels, or no assignee | |
| 519 | -| `author:octocat`, `-author:octocat` | Opened, or not opened, by this login | | |
| 520 | -| `assignee:octocat` | Assigned to this login | | |
| 519 | +| `author:diffy`, `-author:diffy` | Opened, or not opened, by this login | | |
| 520 | +| `assignee:diffy` | Assigned to this login | | |
| 521 | 521 | | `head:branch`, `base:branch` | Pull requests from or into this branch | |
| 522 | 522 | | `in:title`, `in:body`, `in:comments` | Where words must match (default: title and body); combine as `in:title,body` | |
| 523 | 523 | | `created:`, `updated:`, `closed:` | Dates: `2026-10-01`, `>2026-10-01`, `>=`, `<`, `<=`, `2026-09-01..2026-09-30`, `2026-09-01..*` | |
modifiedapps/diffinery/docs/reference/webhook-events.md+27−27View file
| @@ -62,13 +62,13 @@ | ||
| 62 | 62 | A person: |
| 63 | 63 | |
| 64 | 64 | ```json |
| 65 | -{ "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 65 | +{ "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 66 | 66 | ``` |
| 67 | 67 | |
| 68 | 68 | An agent, with the login of the person or organization it acts for: |
| 69 | 69 | |
| 70 | 70 | ```json |
| 71 | -{ "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "octocat" } | |
| 71 | +{ "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "diffy" } | |
| 72 | 72 | ``` |
| 73 | 73 | |
| 74 | 74 | | Field | Description | |
| @@ -114,7 +114,7 @@ | ||
| 114 | 114 | "html_url": "https://diffinery.com/acme/website", |
| 115 | 115 | "clone_url": "https://diffinery.com/acme/website.git" |
| 116 | 116 | }, |
| 117 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 117 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 118 | 118 | } |
| 119 | 119 | ``` |
| 120 | 120 | |
| @@ -130,7 +130,7 @@ | ||
| 130 | 130 | "deleted": false, |
| 131 | 131 | "at": "2026-10-13T09:31:12.000Z", |
| 132 | 132 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 133 | - "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "octocat" } | |
| 133 | + "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "diffy" } | |
| 134 | 134 | } |
| 135 | 135 | ``` |
| 136 | 136 | |
| @@ -182,7 +182,7 @@ | ||
| 182 | 182 | "baseRef": "main", |
| 183 | 183 | "at": "2026-10-13T09:32:40.000Z", |
| 184 | 184 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 185 | - "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "octocat" }, | |
| 185 | + "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "diffy" }, | |
| 186 | 186 | "pull_request": { |
| 187 | 187 | "number": 42, |
| 188 | 188 | "html_url": "https://diffinery.com/acme/website/pull/42", |
| @@ -204,7 +204,7 @@ | ||
| 204 | 204 | "baseRef": "main", |
| 205 | 205 | "at": "2026-10-13T10:05:11.000Z", |
| 206 | 206 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 207 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" }, | |
| 207 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" }, | |
| 208 | 208 | "pull_request": { |
| 209 | 209 | "number": 42, |
| 210 | 210 | "html_url": "https://diffinery.com/acme/website/pull/42", |
| @@ -227,9 +227,9 @@ | ||
| 227 | 227 | "headSha": "2b7e9d4c1a3f5e7d9b0c2a4e6f8d0b1c3e5a7f9d", |
| 228 | 228 | "baseRef": "main", |
| 229 | 229 | "at": "2026-10-13T09:33:05.000Z", |
| 230 | - "reviewers": ["octocat"], | |
| 230 | + "reviewers": ["diffy"], | |
| 231 | 231 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 232 | - "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "octocat" }, | |
| 232 | + "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "diffy" }, | |
| 233 | 233 | "pull_request": { |
| 234 | 234 | "number": 42, |
| 235 | 235 | "html_url": "https://diffinery.com/acme/website/pull/42", |
| @@ -240,7 +240,7 @@ | ||
| 240 | 240 | } |
| 241 | 241 | ``` |
| 242 | 242 | |
| 243 | -The `assigned` payload has the same shape with `"assignees": ["octocat"]` instead of `reviewers`. | |
| 243 | +The `assigned` payload has the same shape with `"assignees": ["diffy"]` instead of `reviewers`. | |
| 244 | 244 | |
| 245 | 245 | Ready for review (`edited` and `converted_to_draft` look the same apart from `action`): |
| 246 | 246 | |
| @@ -253,7 +253,7 @@ | ||
| 253 | 253 | "baseRef": "main", |
| 254 | 254 | "at": "2026-10-13T09:45:10.000Z", |
| 255 | 255 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 256 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" }, | |
| 256 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" }, | |
| 257 | 257 | "pull_request": { |
| 258 | 258 | "number": 42, |
| 259 | 259 | "html_url": "https://diffinery.com/acme/website/pull/42", |
| @@ -288,7 +288,7 @@ | ||
| 288 | 288 | "state": "APPROVED", |
| 289 | 289 | "at": "2026-10-13T09:50:00.000Z", |
| 290 | 290 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 291 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 291 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 292 | 292 | } |
| 293 | 293 | ``` |
| 294 | 294 | |
| @@ -321,7 +321,7 @@ | ||
| 321 | 321 | "number": 12, |
| 322 | 322 | "at": "2026-10-13T08:15:00.000Z", |
| 323 | 323 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 324 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" }, | |
| 324 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" }, | |
| 325 | 325 | "issue": { "number": 12, "html_url": "https://diffinery.com/acme/website/issues/12" } |
| 326 | 326 | } |
| 327 | 327 | ``` |
| @@ -333,7 +333,7 @@ | ||
| 333 | 333 | "at": "2026-10-13T08:20:00.000Z", |
| 334 | 334 | "assignees": ["review-bot"], |
| 335 | 335 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 336 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" }, | |
| 336 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" }, | |
| 337 | 337 | "issue": { "number": 12, "html_url": "https://diffinery.com/acme/website/issues/12" } |
| 338 | 338 | } |
| 339 | 339 | ``` |
| @@ -364,7 +364,7 @@ | ||
| 364 | 364 | "commentId": "3e2d1c0b9a8f4e7d6c5b4a3f2e1d0c9b", |
| 365 | 365 | "at": "2026-10-13T09:40:00.000Z", |
| 366 | 366 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 367 | - "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "octocat" }, | |
| 367 | + "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "diffy" }, | |
| 368 | 368 | "issue": { "number": 42, "html_url": "https://diffinery.com/acme/website/issues/42" } |
| 369 | 369 | } |
| 370 | 370 | ``` |
| @@ -394,7 +394,7 @@ | ||
| 394 | 394 | "conclusion": "success", |
| 395 | 395 | "at": "2026-10-13T09:36:21.000Z", |
| 396 | 396 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 397 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 397 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 398 | 398 | } |
| 399 | 399 | ``` |
| 400 | 400 | |
| @@ -433,15 +433,15 @@ | ||
| 433 | 433 | "html_url": "https://diffinery.com/acme/website/releases/tag/v1.2.0", |
| 434 | 434 | "id": 7, |
| 435 | 435 | "author": { |
| 436 | - "login": "octocat", | |
| 436 | + "login": "diffy", | |
| 437 | 437 | "id": 7220136606554077, |
| 438 | 438 | "node_id": "VXNlcjphMWIyYzNkNGU1ZjYwNzE4MjkzYTRiNWM2ZDdlOGY5MA", |
| 439 | - "avatar_url": "https://diffinery.com/api/avatars/octocat", | |
| 439 | + "avatar_url": "https://diffinery.com/api/avatars/diffy", | |
| 440 | 440 | "gravatar_id": "", |
| 441 | - "url": "https://diffinery.com/api/v3/users/octocat", | |
| 442 | - "html_url": "https://diffinery.com/octocat", | |
| 443 | - "repos_url": "https://diffinery.com/api/v3/users/octocat/repos", | |
| 444 | - "organizations_url": "https://diffinery.com/api/v3/users/octocat/orgs", | |
| 441 | + "url": "https://diffinery.com/api/v3/users/diffy", | |
| 442 | + "html_url": "https://diffinery.com/diffy", | |
| 443 | + "repos_url": "https://diffinery.com/api/v3/users/diffy/repos", | |
| 444 | + "organizations_url": "https://diffinery.com/api/v3/users/diffy/orgs", | |
| 445 | 445 | "type": "User", |
| 446 | 446 | "user_view_type": "public", |
| 447 | 447 | "site_admin": false |
| @@ -459,12 +459,12 @@ | ||
| 459 | 459 | "assets": [], |
| 460 | 460 | "tarball_url": "https://diffinery.com/api/v3/repos/acme/website/tarball/v1.2.0", |
| 461 | 461 | "zipball_url": "https://diffinery.com/api/v3/repos/acme/website/zipball/v1.2.0", |
| 462 | - "body": "## What's Changed\n* Fix broken footer links by @octocat in https://diffinery.com/acme/website/pull/41\n\n**Full Changelog**: https://diffinery.com/acme/website/compare/v1.1.0...v1.2.0", | |
| 462 | + "body": "## What's Changed\n* Fix broken footer links by @diffy in https://diffinery.com/acme/website/pull/41\n\n**Full Changelog**: https://diffinery.com/acme/website/compare/v1.1.0...v1.2.0", | |
| 463 | 463 | "reactions": { "url": "https://diffinery.com/api/v3/repos/acme/website/releases/7/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "confused": 0, "heart": 0, "hooray": 0, "rocket": 0, "eyes": 0 }, |
| 464 | 464 | "latest": true |
| 465 | 465 | }, |
| 466 | 466 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 467 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 467 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 468 | 468 | } |
| 469 | 469 | ``` |
| 470 | 470 | |
| @@ -541,7 +541,7 @@ | ||
| 541 | 541 | "created_at": "2026-10-13T10:05:00.000Z" |
| 542 | 542 | }, |
| 543 | 543 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 544 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 544 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 545 | 545 | } |
| 546 | 546 | ``` |
| 547 | 547 | |
| @@ -591,7 +591,7 @@ | ||
| 591 | 591 | "environment": "production" |
| 592 | 592 | }, |
| 593 | 593 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 594 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 594 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 595 | 595 | } |
| 596 | 596 | ``` |
| 597 | 597 | |
| @@ -617,7 +617,7 @@ | ||
| 617 | 617 | "branch": "main", |
| 618 | 618 | "client_payload": { "version": "1.2.0" }, |
| 619 | 619 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 620 | - "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "octocat" } | |
| 620 | + "sender": { "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "login": "review-bot", "type": "Bot", "on_behalf_of": "diffy" } | |
| 621 | 621 | } |
| 622 | 622 | ``` |
| 623 | 623 | |
| @@ -639,7 +639,7 @@ | ||
| 639 | 639 | "inputs": { "environment": "staging", "version": "1.2.0", "dry-run": false }, |
| 640 | 640 | "at": "2026-10-13T10:15:00.000Z", |
| 641 | 641 | "repository": { "id": 6628874657374920, "node_id": "UmVwb3NpdG9yeTo1YzBlOGI3ZjJkMWE0ZTNiOWY2YTdjOGQ5ZTBmMWEyYg", "name": "website", "full_name": "acme/website", "owner": { "login": "acme" }, "html_url": "https://diffinery.com/acme/website", "clone_url": "https://diffinery.com/acme/website.git" }, |
| 642 | - "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "octocat", "type": "User" } | |
| 642 | + "sender": { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "login": "diffy", "type": "User" } | |
| 643 | 643 | } |
| 644 | 644 | ``` |
| 645 | 645 |
modifiedapps/diffinery/docs/repositories/overview.md+6−6View file
| @@ -11,7 +11,7 @@ | ||
| 11 | 11 | |
| 12 | 12 | | Owner | Who can create repositories there | Who gets access automatically | |
| 13 | 13 | | --- | --- | --- | |
| 14 | -| Your user account (`octocat/notes`) | Only you (and site administrators) | You are **admin**. Nobody else, unless you add collaborators or make it public. | | |
| 14 | +| Your user account (`diffy/notes`) | Only you (and site administrators) | You are **admin**. Nobody else, unless you add collaborators or make it public. | | |
| 15 | 15 | | An organization (`acme/website`) | Any member of the organization | Organization **members** get **write**. Organization **owners** and **admins** get **admin**. | |
| 16 | 16 | |
| 17 | 17 | You can add collaborators to either kind for extra or narrower access (see [Collaborators and roles](#collaborators-and-roles)). Organizations have no teams: access in an organization comes from the member's organization role plus any collaborator role on the repository. See [Organizations](/docs/accounts/organizations). |
| @@ -184,7 +184,7 @@ | ||
| 184 | 184 | |
| 185 | 185 | Open **Settings → Collaborators** and use the **Add people** form: |
| 186 | 186 | |
| 187 | -1. In **Username or email**, enter a person's or agent's username (for example `octocat` or `review-bot`, with or without a leading `@`) or an email address. | |
| 187 | +1. In **Username or email**, enter a person's or agent's username (for example `diffy` or `review-bot`, with or without a leading `@`) or an email address. | |
| 188 | 188 | 2. Pick a **Role** (**Read**, **Triage**, **Write**, **Maintain** or **Admin**; the default is **Write**). |
| 189 | 189 | 3. Click **Add**. |
| 190 | 190 | |
| @@ -192,7 +192,7 @@ | ||
| 192 | 192 | |
| 193 | 193 | | You entered | Result | |
| 194 | 194 | | --- | --- | |
| 195 | -| The username of a person or agent | They get the role right away, a notification on Diffinery and an email. The page confirms with "octocat now has write access. We let them know." | | |
| 195 | +| The username of a person or agent | They get the role right away, a notification on Diffinery and an email. The page confirms with "diffy now has write access. We let them know." | | |
| 196 | 196 | | The email address of someone who has an account | Same as their username. | |
| 197 | 197 | | An email address nobody uses yet | Diffinery emails an invitation and shows the link once ("Invitation sent to ..."), so you can also send it yourself. The link works once and expires in 14 days. Opening it creates the person's account and passkey and gives them the role on this repository. See [Invitations](/docs/accounts/invitations). | |
| 198 | 198 | |
| @@ -218,12 +218,12 @@ | ||
| 218 | 218 | curl https://diffinery.com/api/v3/repos/acme/website/collaborators -H "Authorization: Bearer dfy_..." |
| 219 | 219 | |
| 220 | 220 | # Add or change a collaborator |
| 221 | -curl -X PUT https://diffinery.com/api/v3/repos/acme/website/collaborators/octocat \ | |
| 221 | +curl -X PUT https://diffinery.com/api/v3/repos/acme/website/collaborators/diffy \ | |
| 222 | 222 | -H "Authorization: Bearer dfy_..." -H "content-type: application/json" \ |
| 223 | 223 | -d '{"permission": "maintain"}' |
| 224 | 224 | |
| 225 | 225 | # Remove a collaborator |
| 226 | -curl -X DELETE https://diffinery.com/api/v3/repos/acme/website/collaborators/octocat -H "Authorization: Bearer dfy_..." | |
| 226 | +curl -X DELETE https://diffinery.com/api/v3/repos/acme/website/collaborators/diffy -H "Authorization: Bearer dfy_..." | |
| 227 | 227 | ``` |
| 228 | 228 | |
| 229 | 229 | `permission` accepts `read`, `triage`, `write`, `maintain` or `admin`, and GitHub's `pull` (read) and `push` (write). It defaults to `write`. The list response gives each account's `role_name`. |
| @@ -296,7 +296,7 @@ | ||
| 296 | 296 | | Task | Web | CLI | API | |
| 297 | 297 | | --- | --- | --- | --- | |
| 298 | 298 | | Repositories you can see | Your dashboard | `diffinery repo list` | `GET /api/v3/user/repos` | |
| 299 | -| One owner's repositories | `https://diffinery.com/acme` | `diffinery repo list --owner acme` | `GET /api/v3/orgs/acme/repos` or `GET /api/v3/users/octocat/repos` | | |
| 299 | +| One owner's repositories | `https://diffinery.com/acme` | `diffinery repo list --owner acme` | `GET /api/v3/orgs/acme/repos` or `GET /api/v3/users/diffy/repos` | | |
| 300 | 300 | | One repository | `https://diffinery.com/acme/website` | `diffinery repo view acme/website` | `GET /api/v3/repos/acme/website` | |
| 301 | 301 | |
| 302 | 302 | `GET /api/v3/repos/{owner}/{repo}` also returns your access as `permissions` (GitHub's `admin`, `maintain`, `push`, `triage` and `pull` booleans plus Diffinery's `role`) and `stats` (objects, stored bytes, refs, open issues and open pull requests). The repository page's **About** box shows the same numbers with the last push time. |
modifiedapps/diffinery/docs/security/audit-log.md+1−1View file
| @@ -137,7 +137,7 @@ | ||
| 137 | 137 | |
| 138 | 138 | ## Agents and on-behalf-of |
| 139 | 139 | |
| 140 | -When an agent acts, the entry records the agent as the actor and the agent's owner in `on_behalf_of`, so the page reads, for example, `review-bot for octocat`. This applies to pushes, merges, push protection decisions and settings changes made with the agent's token. (Agents can never bypass branch protection on a merge, so `pull_request.merge_bypassed` always names a person.) See [Agents](/docs/agents/overview). | |
| 140 | +When an agent acts, the entry records the agent as the actor and the agent's owner in `on_behalf_of`, so the page reads, for example, `review-bot for diffy`. This applies to pushes, merges, push protection decisions and settings changes made with the agent's token. (Agents can never bypass branch protection on a merge, so `pull_request.merge_bypassed` always names a person.) See [Agents](/docs/agents/overview). | |
| 141 | 141 | |
| 142 | 142 | ## Security emails |
| 143 | 143 |
modifiedapps/diffinery/docs/security/push-protection.md+1−1View file
| @@ -175,7 +175,7 @@ | ||
| 175 | 175 | |
| 176 | 176 | ### What a bypass does |
| 177 | 177 | |
| 178 | -- The push continues and the output shows `Push protection bypassed by octocat: <reason>`, followed by the findings (up to 10). | |
| 178 | +- The push continues and the output shows `Push protection bypassed by diffy: <reason>`, followed by the findings (up to 10). | |
| 179 | 179 | - The bypass skips only the secret scan. Branch protection still applies to every ref. |
| 180 | 180 | - It is recorded in the [audit log](/docs/security/audit-log) as `push.secret_bypassed`, with the detected types, your reason and the refs. |
| 181 | 181 | - An email with the subject `[acme/website] Push protection was bypassed` goes to you and to the repository's admins (the owner or the organization's owners and admins, plus admin collaborators who are people). It names who pushed, the types found, the reason and the refs. You cannot turn this email off. |
modifiedapps/diffinery/src/docs/reference.ts+1−1View file
| @@ -159,7 +159,7 @@ | ||
| 159 | 159 | action: "Action to take.", |
| 160 | 160 | }; |
| 161 | 161 | |
| 162 | -const EXAMPLE: Record<string, string> = { owner: "acme", repo: "website", org: "acme", login: "octocat", number: "42", branch: "main", ref: "main", path: "README.md", spec: "main...feature", type: "container", name: "website", workflow: "ci.yml", action: "exec" }; | |
| 162 | +const EXAMPLE: Record<string, string> = { owner: "acme", repo: "website", org: "acme", login: "diffy", number: "42", branch: "main", ref: "main", path: "README.md", spec: "main...feature", type: "container", name: "website", workflow: "ci.yml", action: "exec" }; | |
| 163 | 163 | |
| 164 | 164 | function curl(origin: string, op: ApiOperation): string { |
| 165 | 165 | const url = `${origin}${API_BASE}${op.path === "/" ? "" : op.path.replace(/\{(\w+)\}/g, (_, p: string) => EXAMPLE[p] ?? (p === "id" ? "1" : p))}`; |
modifiedapps/diffinery/src/mail/samples.ts+2−2View file
| @@ -14,7 +14,7 @@ | ||
| 14 | 14 | kind: "pull", |
| 15 | 15 | title: "Cache build artifacts between workflow runs", |
| 16 | 16 | event: "opened", |
| 17 | - actor: "octo-dev", | |
| 17 | + actor: "diffy-dev", | |
| 18 | 18 | url: `${pub}/${repo}/pull/42`, |
| 19 | 19 | base: "main", |
| 20 | 20 | head: "cache-artifacts", |
| @@ -74,7 +74,7 @@ | ||
| 74 | 74 | item("welcome", "Welcome", { kind: "welcome", reason: "account", data: { login: me } }), |
| 75 | 75 | item("signin-link", "Sign-in link", { kind: "signin_link", reason: "account", data: { url: `${pub}/signin/sample`, admin: "admin", expiresAt: new Date(Date.now() + 86400_000).toISOString() } }), |
| 76 | 76 | item("access-request", "Access request", { kind: "access_request", reason: "admin", data: { email: "newcomer@example.com", login: "newcomer", note: "I'm joining the platform team next week." } }), |
| 77 | - item("org-member", "Organization membership", { kind: "org_membership", reason: "account", data: { org: repo.split("/")[0]!, role: "admin", previous: "member", by: "octo-dev" } }), | |
| 77 | + item("org-member", "Organization membership", { kind: "org_membership", reason: "account", data: { org: repo.split("/")[0]!, role: "admin", previous: "member", by: "diffy-dev" } }), | |
| 78 | 78 | item("repo-access", "Repository access", { kind: "repo_access", reason: "account", data: { repo, role: "write", previous: null } }), |
| 79 | 79 | item("repo-created", "Repository created", { kind: "repo_created", reason: "your_activity", data: { repo, creator: me, visibility: "private", defaultBranch: "main", description: "Marketing site" } }), |
| 80 | 80 | item("repo-deleted", "Repository deleted", { kind: "repo_deleted", reason: "admin", data: { repo, actor: "kim" } }), |
modifiedapps/diffinery/src/web/account.tsx+1−1View file
| @@ -1721,7 +1721,7 @@ | ||
| 1721 | 1721 | <div class="formrow"> |
| 1722 | 1722 | <div class="field grow"> |
| 1723 | 1723 | <label for="who">Username or email</label> |
| 1724 | - <input id="who" name="who" type="text" required autocomplete="off" spellcheck={false} placeholder="octocat or name@example.com" /> | |
| 1724 | + <input id="who" name="who" type="text" required autocomplete="off" spellcheck={false} placeholder="diffy or name@example.com" /> | |
| 1725 | 1725 | </div> |
| 1726 | 1726 | <div class="field"> |
| 1727 | 1727 | <label for="role">Role</label> |
modifiedapps/diffinery/src/web/imports.tsx+3−3View file
| @@ -52,8 +52,8 @@ | ||
| 52 | 52 | </div> |
| 53 | 53 | <div class="field"> |
| 54 | 54 | <label for="source">GitHub repository, or organization/user</label> |
| 55 | - <input id="source" name="source" type="text" value={values.source} placeholder="octocat/hello-world or octocat" autofocus autocomplete="off" required /> | |
| 56 | - <p class="muted small m0">Example: a URL like https://github.com/octocat/hello-world, or just octocat/hello-world. For a whole account, its name.</p> | |
| 55 | + <input id="source" name="source" type="text" value={values.source} placeholder="diffy/hello-world or diffy" autofocus autocomplete="off" required /> | |
| 56 | + <p class="muted small m0">Example: a URL like https://github.com/diffy/hello-world, or just diffy/hello-world. For a whole account, its name.</p> | |
| 57 | 57 | </div> |
| 58 | 58 | <div class="row" style="align-items:flex-end;gap:10px"> |
| 59 | 59 | <div class="field" style="min-width:200px"> |
| @@ -581,7 +581,7 @@ | ||
| 581 | 581 | <input type="hidden" name="api_url" value={challenge.apiUrl} /> |
| 582 | 582 | <div class="field"> |
| 583 | 583 | <label for="llogin">Your GitHub username on {challenge.host}</label> |
| 584 | - <input id="llogin" name="login" type="text" autocomplete="off" placeholder="octocat" required /> | |
| 584 | + <input id="llogin" name="login" type="text" autocomplete="off" placeholder="diffy" required /> | |
| 585 | 585 | </div> |
| 586 | 586 | <button class="btn primary">Verify and link</button> |
| 587 | 587 | </Form> |
modifiedapps/diffinery/src/web/repo-settings.tsx+1−1View file
| @@ -289,7 +289,7 @@ | ||
| 289 | 289 | <div class="formrow"> |
| 290 | 290 | <div class="field grow"> |
| 291 | 291 | <label for="who">Username or email</label> |
| 292 | - <input id="who" name="who" type="text" required autocomplete="off" spellcheck={false} placeholder="octocat, review-bot or name@example.com" /> | |
| 292 | + <input id="who" name="who" type="text" required autocomplete="off" spellcheck={false} placeholder="diffy, review-bot or name@example.com" /> | |
| 293 | 293 | </div> |
| 294 | 294 | <div class="field"> |
| 295 | 295 | <label for="role">Role</label> |
modifiedapps/diffinery/test/e2e/e2e.test.mjs+3−3View file
| @@ -1520,8 +1520,8 @@ | ||
| 1520 | 1520 | const full = await gh.rest.git.getTree({ ...R, tree_sha: tree.data.sha, recursive: "true" }); |
| 1521 | 1521 | assert.ok(full.data.tree.some((e) => e.path === "gitdata/hello.txt" && e.type === "blob")); |
| 1522 | 1522 | assert.ok(full.data.tree.some((e) => e.path === "src/main.ts")); |
| 1523 | - const commit = await gh.rest.git.createCommit({ ...R, message: "Commit from the git data API", tree: tree.data.sha, parents: [headSha], author: { name: "Octo Cat", email: "octo@example.com", date: "2024-05-06T07:08:09Z" } }); | |
| 1524 | - assert.equal(commit.data.author.name, "Octo Cat"); | |
| 1523 | + const commit = await gh.rest.git.createCommit({ ...R, message: "Commit from the git data API", tree: tree.data.sha, parents: [headSha], author: { name: "Diffy", email: "diffy@example.com", date: "2024-05-06T07:08:09Z" } }); | |
| 1524 | + assert.equal(commit.data.author.name, "Diffy"); | |
| 1525 | 1525 | assert.deepEqual(commit.data.parents.map((p) => p.sha), [headSha]); |
| 1526 | 1526 | const ref = await gh.rest.git.createRef({ ...R, ref: "refs/heads/feature", sha: commit.data.sha }); |
| 1527 | 1527 | assert.equal(ref.data.ref, "refs/heads/feature"); |
| @@ -1529,7 +1529,7 @@ | ||
| 1529 | 1529 | await assert.rejects(gh.rest.git.createRef({ ...R, ref: "refs/heads/feature", sha: commit.data.sha }), (e) => e.status === 422); |
| 1530 | 1530 | const matching = await gh.rest.git.listMatchingRefs({ ...R, ref: "heads/f" }); |
| 1531 | 1531 | assert.deepEqual(matching.data.map((x) => x.ref), ["refs/heads/feature"]); |
| 1532 | - const tag = await gh.rest.git.createTag({ ...R, tag: "v0.1.0", message: "Annotated tag", object: commit.data.sha, type: "commit", tagger: { name: "Octo Cat", email: "octo@example.com", date: "2024-05-06T07:08:09Z" } }); | |
| 1532 | + const tag = await gh.rest.git.createTag({ ...R, tag: "v0.1.0", message: "Annotated tag", object: commit.data.sha, type: "commit", tagger: { name: "Diffy", email: "diffy@example.com", date: "2024-05-06T07:08:09Z" } }); | |
| 1533 | 1533 | await gh.rest.git.createRef({ ...R, ref: "refs/tags/v0.1.0", sha: tag.data.sha }); |
| 1534 | 1534 | assert.equal((await gh.rest.git.getTag({ ...R, tag_sha: tag.data.sha })).data.object.sha, commit.data.sha); |
| 1535 | 1535 | assert.equal((await gh.rest.git.getRef({ ...R, ref: "tags/v0.1.0" })).data.object.type, "tag"); |
modifiedapps/diffinery/test/unit/email.test.ts+6−6View file
| @@ -10,7 +10,7 @@ | ||
| 10 | 10 | |
| 11 | 11 | const PUB = "https://diffinery.example"; |
| 12 | 12 | const env = { PUBLIC_URL: PUB, MASTER_KEY: "test-master-key", MAIL_FROM: "notifications@diffinery.example" } as unknown as Env; |
| 13 | -const samples = sampleJobs(PUB, { accountId: "acc1" }, "octocat"); | |
| 13 | +const samples = sampleJobs(PUB, { accountId: "acc1" }, "diffy"); | |
| 14 | 14 | |
| 15 | 15 | describe("email templates", () => { |
| 16 | 16 | it("has a sample for every kind of email", () => { |
| @@ -21,7 +21,7 @@ | ||
| 21 | 21 | }); |
| 22 | 22 | |
| 23 | 23 | it.each(samples.map((s) => [s.id, s.job] as const))("renders %s as HTML and plain text", async (_id, job) => { |
| 24 | - const msg = await buildMessage(env, job, { email: "octocat@example.com", name: "Octo Cat", login: "octocat", accountId: "acc1" }); | |
| 24 | + const msg = await buildMessage(env, job, { email: "diffy@example.com", name: "Diffy", login: "diffy", accountId: "acc1" }); | |
| 25 | 25 | expect(msg.subject.length).toBeGreaterThan(5); |
| 26 | 26 | expect(msg.subject).not.toMatch(/[\r\n]/); |
| 27 | 27 | expect(msg.html).toMatch(/^<!doctype html>/i); |
| @@ -44,8 +44,8 @@ | ||
| 44 | 44 | it("threads issue and pull request emails like GitHub", async () => { |
| 45 | 45 | const opened = samples.find((s) => s.id === "pr-opened")!.job; |
| 46 | 46 | const comment = samples.find((s) => s.id === "comment")!.job; |
| 47 | - const a = await buildMessage(env, opened, { email: "a@example.com", accountId: "acc1", login: "octocat" }); | |
| 48 | - const b = await buildMessage(env, comment, { email: "a@example.com", accountId: "acc1", login: "octocat" }); | |
| 47 | + const a = await buildMessage(env, opened, { email: "a@example.com", accountId: "acc1", login: "diffy" }); | |
| 48 | + const b = await buildMessage(env, comment, { email: "a@example.com", accountId: "acc1", login: "diffy" }); | |
| 49 | 49 | expect(a.subject).toBe("[acme/website] Cache build artifacts between workflow runs (PR #42)"); |
| 50 | 50 | expect(b.subject).toBe("Re: [acme/website] Cache build artifacts between workflow runs (PR #42)"); |
| 51 | 51 | expect(a.headers.References).toBe(b.headers.References); |
| @@ -57,7 +57,7 @@ | ||
| 57 | 57 | it("escapes what people write", () => { |
| 58 | 58 | const job = { ...samples.find((s) => s.id === "issue-opened")!.job } as Extract<MailJob, { kind: "thread" }>; |
| 59 | 59 | job.data = { ...job.data, title: `<img src=x onerror=alert(1)>`, body: `<script>alert(1)</script> **bold**` }; |
| 60 | - const e = compose(job, PUB, "octocat"); | |
| 60 | + const e = compose(job, PUB, "diffy"); | |
| 61 | 61 | const html = toHtml(e, { publicUrl: PUB, reason: job.reason, unsubscribe: [] }); |
| 62 | 62 | expect(html).not.toContain("<img src=x"); |
| 63 | 63 | expect(html).not.toContain("<script>alert(1)"); |
| @@ -76,7 +76,7 @@ | ||
| 76 | 76 | |
| 77 | 77 | describe("mentions", () => { |
| 78 | 78 | it("finds @logins outside code", () => { |
| 79 | - expect(mentions("Hey @Octocat and @rivera-2, see `@notme` and\n```\n@alsonot\n```\nmail me@example.com")).toEqual(["octocat", "rivera-2"]); | |
| 79 | + expect(mentions("Hey @Diffy and @rivera-2, see `@notme` and\n```\n@alsonot\n```\nmail me@example.com")).toEqual(["diffy", "rivera-2"]); | |
| 80 | 80 | expect(mentions(null)).toEqual([]); |
| 81 | 81 | }); |
| 82 | 82 | }); |