g1t/apps/web/app/lib/changelog.ts
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.
| Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API | 1 | /** |
| 2 | * What is new on g1t, newest first, for the corner of mission control that | |
| 3 | * says so. Short and specific: what changed, and where to see it. Add an | |
| 4 | * entry in the same change that ships the feature. | |
| 5 | */ | |
| 6 | export type ChangelogEntry = { | |
| 7 | /** `YYYY-MM-DD`. */ | |
| 8 | date: string; | |
| 9 | title: string; | |
| 10 | about: string; | |
| 11 | /** Docs, or a page on g1t; `{workspace}` and `{project}` are filled in where known. */ | |
| 12 | href: string; | |
| 13 | }; | |
| 14 | ||
| 15 | export const CHANGELOG: ChangelogEntry[] = [ | |
| 16 | { | |
| Catching up with main takes seconds when the two sides touched different files | 17 | date: "2026-10-05", |
| Prices are what g1t pays plus 20%, from the first second | 18 | title: "Cost plus 20%, on everything", |
| 19 | about: | |
| 20 | "Sandbox time is charged at cost plus 20% from the first second, with no free minutes. Runs on your own model provider no longer carry a $0.10 fee: they pay only their sandbox time.", | |
| 21 | href: "/pricing", | |
| 22 | }, | |
| 23 | { | |
| 24 | date: "2026-10-05", | |
| Catching up with main takes seconds when the two sides touched different files | 25 | title: "Catch up in seconds", |
| 26 | about: | |
| 27 | "Catch up with main merges it in at once when the two changed different files. When they overlap, the merge box shows g1t-agent at work, step by step.", | |
| 28 | href: "https://docs.g1t.sh/guides/pull-requests/#catching-up", | |
| 29 | }, | |
| 30 | { | |
| Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API | 31 | date: "2026-10-04", |
| 32 | title: "Agents and memory", | |
| 33 | about: "Watch every agent run live, stop or message it, and see what agents learned about each project.", | |
| 34 | href: "/{workspace}/-/agents", | |
| 35 | }, | |
| 36 | { | |
| 37 | date: "2026-10-04", | |
| 38 | title: "Checks and conflicts", | |
| 39 | about: "Workflow statuses on every pull request, and conflicts found before you press merge.", | |
| 40 | href: "https://docs.g1t.sh/guides/pull-requests/", | |
| 41 | }, | |
| 42 | { | |
| 43 | date: "2026-10-04", | |
| 44 | title: "Profiles", | |
| 45 | about: "Your name, bio and everything you opened, in one place.", | |
| 46 | href: "/settings", | |
| 47 | }, | |
| 48 | { | |
| 49 | date: "2026-10-04", | |
| 50 | title: "Custom domains", | |
| 51 | about: "Serve production on your own domain, with its certificate handled for you.", | |
| 52 | href: "https://docs.g1t.sh/guides/deployments/", | |
| 53 | }, | |
| 54 | { | |
| 55 | date: "2026-10-04", | |
| 56 | title: "Rename a workspace", | |
| 57 | about: "Old addresses redirect for 90 days, so links and clones keep working.", | |
| 58 | href: "/{workspace}/-/settings", | |
| 59 | }, | |
| 60 | { | |
| 61 | date: "2026-10-04", | |
| 62 | title: "Workspace names and icons", | |
| 63 | about: "Give a workspace a display name and an icon of its own.", | |
| 64 | href: "/{workspace}/-/settings", | |
| 65 | }, | |
| 66 | ]; | |
| 67 | ||
| 68 | /** An entry's link, with the workspace filled in; null when it needs one and there is none. */ | |
| 69 | export function changelogHref(entry: ChangelogEntry, workspace: string | null): string | null { | |
| 70 | if (!entry.href.includes("{workspace}")) return entry.href; | |
| 71 | return workspace ? entry.href.replaceAll("{workspace}", workspace) : null; | |
| 72 | } |