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.
| The statement is a month at a time, a line per kind of charge | 1 | /** |
| 2 | * A project's pages and the tabs within them, in one place: the sidebar | |
| 3 | * lists the pages, and a page with more than one view shows them as tabs | |
| 4 | * across its top, the way GitHub and Vercel do. Soon tabs come from the | |
| 5 | * roadmap and open its page for them, under the same tabs. | |
| 6 | */ | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 7 | import type { Abilities, Capability, RepoMirror } from "@g1t/contracts"; |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 8 | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 9 | import { type RepoArea, offers } from "./mirror.ts"; |
| 10 | import { type RoadmapItem, roadmapIn } from "./roadmap.ts"; | |
| The statement is a month at a time, a line per kind of charge | 11 | |
| 12 | export type Tab = { | |
| 13 | label: string; | |
| 14 | /** Under the project, without a leading slash; "" is its overview. */ | |
| 15 | path: string; | |
| 16 | /** Other paths under which this tab is the current one. */ | |
| 17 | also?: string[]; | |
| 18 | soon?: boolean; | |
| 19 | about?: string; | |
| 20 | /** Members only. */ | |
| 21 | members?: boolean; | |
| Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar | 22 | /** Current on its own path only, not on the paths under it. */ |
| 23 | exact?: boolean; | |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 24 | /** Only for viewers whose role has this capability, once it is known. */ |
| 25 | needs?: Capability; | |
| The statement is a month at a time, a line per kind of charge | 26 | }; |
| 27 | ||
| 28 | export type Section = { | |
| 29 | key: RoadmapItem["section"] | "Workflows" | "Settings"; | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 30 | /** The part of the repository it is about: a mirror shows the tabs of what it offers (lib/mirror.ts `offers`). */ |
| 31 | area: RepoArea; | |
| The statement is a month at a time, a line per kind of charge | 32 | tabs: Tab[]; |
| 33 | }; | |
| 34 | ||
| 35 | function soon(section: RoadmapItem["section"]): Tab[] { | |
| 36 | return roadmapIn(section).map((item) => ({ label: item.title, path: `soon/${item.key}`, soon: true, about: item.summary })); | |
| 37 | } | |
| 38 | ||
| 39 | export const SECTIONS: Section[] = [ | |
| 40 | { | |
| 41 | key: "Code", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 42 | area: "code", |
| The statement is a month at a time, a line per kind of charge | 43 | tabs: [ |
| 44 | { label: "Files", path: "code", also: ["tree", "blob"] }, | |
| 45 | { label: "Commits", path: "commits", also: ["commit"] }, | |
| Branches and Tags pages, each file's last commit, and the branch menu on files | 46 | { label: "Branches", path: "branches" }, |
| 47 | { label: "Tags", path: "tags" }, | |
| Merge branch 'main' into worktree-agent-a69aeabc4b0deeb97 | 48 | { label: "Releases", path: "releases" }, |
| Compare: any two branches, the commits one has that the other does not, and the diff, with Open a pull request | 49 | { label: "Compare", path: "compare" }, |
| Chat controls, public profiles, shadcn selects, and no Docs tab in a project | 50 | // No Docs tab: code is not docs. Docs is a workspace mode, filtered by project there. |
| The statement is a month at a time, a line per kind of charge | 51 | ], |
| 52 | }, | |
| 53 | { | |
| 54 | key: "Issues", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 55 | area: "issues", |
| The statement is a month at a time, a line per kind of charge | 56 | tabs: [ |
| 57 | { label: "Issues", path: "issues" }, | |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 58 | { label: "Outcomes", path: "plans" }, |
| Usage, Billing settings and prepaid AI credit; fixes from the UX audit | 59 | { label: "Milestones", path: "milestones" }, |
| The statement is a month at a time, a line per kind of charge | 60 | ...soon("Issues"), |
| 61 | ], | |
| 62 | }, | |
| 63 | { | |
| 64 | key: "Agents", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 65 | area: "agents", |
| The statement is a month at a time, a line per kind of charge | 66 | tabs: [ |
| 67 | { label: "At work", path: "agents" }, | |
| 68 | { label: "Sessions", path: "sessions" }, | |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 69 | { label: "Memory", path: "memory" }, |
| The statement is a month at a time, a line per kind of charge | 70 | ...soon("Agents"), |
| 71 | ], | |
| 72 | }, | |
| 73 | { | |
| 74 | key: "Deployments", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 75 | area: "deployments", |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 76 | tabs: [{ label: "Deployments", path: "deployments" }, ...soon("Deployments")], |
| The statement is a month at a time, a line per kind of charge | 77 | }, |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 78 | { key: "Observability", area: "deployments", tabs: soon("Observability") }, |
| Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API | 79 | { |
| 80 | key: "Security", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 81 | area: "security", |
| Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar | 82 | tabs: [ |
| Merge main (membership, two-factor, GitHub repo roles) into tokens | 83 | { label: "Overview", path: "security", members: true, needs: "security_alerts", exact: true }, |
| 84 | { label: "Secret scanning", path: "security/secret-scanning", members: true, needs: "security_alerts" }, | |
| 85 | { label: "Code scanning", path: "security/code-scanning", members: true, needs: "security_alerts", also: ["security/pulls"] }, | |
| 86 | { label: "Vulnerabilities", path: "security/vulnerabilities", members: true, needs: "security_alerts" }, | |
| 87 | { label: "Dependency graph", path: "security/dependency-graph", members: true, needs: "security_alerts" }, | |
| 88 | { label: "Dependency updates", path: "security/dependency-updates", members: true, needs: "security_alerts" }, | |
| A repository's Security overview is one row per feature in three groups, each with a status word (Enabled, Disabled, Needs setup, Coming), a line on what it does and the one thing to do about it: the security policy (View policy, or Set up a security policy, which commits a starting SECURITY.md on a branch and opens it as a pull request), dependency alerts, security updates (the switch, kept on Vulnerabilities and now in Settings too), code scanning (Enabled once an analysis was uploaded), secret scanning (push protection always on) and code quality as Coming; and under Reporting, advisories and the private vulnerability reporting switch. Anyone who can see a public repository but has no role on it sees the public face at the same address: the policy, the published advisories and, when it is on, Report a vulnerability. Advisories get their pages (the list with its state filter, one advisory with Publish, Withdraw and Edit, a form for a new draft or changes) and reports theirs (new ones first, each accepted into a draft advisory or declined), with a Reports page beside Advisories and an Advisories tab; the public report form takes an email when signed out and counts against the front door's heavy limit. Security settings gain Alerts for secrets in the history and Private vulnerability reporting. Settings → Notifications gains a Security section: critical and high alerts at once (always, for the workspaces one owns or manages security for) and the rest in a daily or weekly digest, at once, or not at all, with security alerts now among the email reasons. The notifications guide says how security alerts arrive and what the digest is, the security guide the overview's rows and the public face, secret protection the history alerts switch, webhooks the summary and advisory events, and a new guide covers advisories and private reporting; the report_settings method lets the public page know whether a repository takes reports. | 89 | { label: "Advisories", path: "security/advisories", members: true, needs: "security_alerts", also: ["security/reports"] }, |
| Merge main (membership, two-factor, GitHub repo roles) into tokens | 90 | { label: "Settings", path: "security/settings", members: true, needs: "security_alerts" }, |
| Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar | 91 | ...soon("Security"), |
| 92 | ], | |
| Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API | 93 | }, |
| Merge branch 'main' into worktree-agent-a69aeabc4b0deeb97 | 94 | { |
| 95 | key: "Insights", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 96 | area: "insights", |
| Merge branch 'main' into worktree-agent-a69aeabc4b0deeb97 | 97 | tabs: [ |
| 98 | { label: "Contributors", path: "contributors" }, | |
| 99 | { label: "Activity", path: "activity" }, | |
| 100 | { label: "Stargazers", path: "stargazers" }, | |
| 101 | ...soon("Insights"), | |
| 102 | ], | |
| 103 | }, | |
| The statement is a month at a time, a line per kind of charge | 104 | ]; |
| 105 | ||
| 106 | /** Pull requests and the merge queue share a page's tabs too. */ | |
| 107 | export const PULLS: Section = { | |
| 108 | key: "Code", | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 109 | area: "pulls", |
| The statement is a month at a time, a line per kind of charge | 110 | tabs: [ |
| 111 | { label: "Pull requests", path: "pulls", also: ["pull"] }, | |
| 112 | { label: "Merge queue", path: "queue" }, | |
| 113 | ], | |
| 114 | }; | |
| 115 | ||
| 116 | function matches(rest: string, tab: Tab): boolean { | |
| 117 | return [tab.path, ...(tab.also ?? [])].some((path) => path !== "" && (rest === path || rest.startsWith(`${path}/`))); | |
| 118 | } | |
| 119 | ||
| 120 | /** | |
| 121 | * The tabs for the page at `rest` (the path under the project), if it | |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 122 | * belongs to a page with more than one view. On a mirror, only the pages |
| 123 | * it offers now have tabs (`mirror`, the repository's). | |
| The statement is a month at a time, a line per kind of charge | 124 | */ |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 125 | export function tabsFor(rest: string, member: boolean, can?: Partial<Abilities>, mirror?: RepoMirror | null): Tab[] | null { |
| The statement is a month at a time, a line per kind of charge | 126 | for (const section of [...SECTIONS, PULLS]) { |
| A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so. | 127 | if (!offers(mirror, section.area)) continue; |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 128 | const visible = section.tabs.filter( |
| 129 | (tab) => (member || !tab.members) && (!tab.needs || !can || Boolean(can[tab.needs])), | |
| 130 | ); | |
| The statement is a month at a time, a line per kind of charge | 131 | if (visible.length > 1 && visible.some((tab) => matches(rest, tab))) return visible; |
| 132 | } | |
| 133 | return null; | |
| 134 | } | |
| 135 | ||
| 136 | /** The first page of a section, for its sidebar link: a built one if any. */ | |
| 137 | export function entryOf(key: Section["key"]): Tab | undefined { | |
| 138 | return SECTIONS.find((section) => section.key === key)?.tabs[0]; | |
| 139 | } |
This file's history is long; its oldest lines are credited to the oldest commit read.