g1t/apps/web/app/lib/roadmap.ts

250 lines11,715 bytesCodeBlame

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.

A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales1/**
2 * What a project will have and does not yet: the pages the project menu
3 * shows as Soon, each with a page of its own saying what it will be. One
4 * place, so the menu and those pages never disagree.
5 *
6 * Each entry says what it is for, what it will do, and what to use today,
7 * so a Soon is a promise someone can read, not a greyed-out word.
8 */
9
10export type RoadmapItem = {
11 /** In the address: `/<owner>/<project>/soon/<key>`. */
12 key: string;
13 title: string;
A flat project menu with Code first, views as tabs, and Stripe for every owner14 /**
15 * Where it lives: a project page whose tabs it joins, or the workspace,
16 * for what spans projects (boards, the roadmap, packages, the fleet).
17 */
Observability gets its own page; tabs never overflow18 section: "Code" | "Issues" | "Agents" | "Deployments" | "Observability" | "Security" | "Insights" | "Workspace";
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales19 /** One line, for the menu's tooltip and the page's lead. */
20 summary: string;
21 /** Why it matters, in two or three sentences. */
22 why: string;
23 /** What it will do. */
24 plans: string[];
25 /** What to use until it exists: a project page, by its path under the project. */
26 today?: { label: string; path: string };
27};
28
29export const ROADMAP: RoadmapItem[] = [
30 // --- Work ---------------------------------------------------------------
31 {
Packages, with a container registry on g1t.sh; workspaces deleted whole and kept 30 days; Members for every member32 key: "teams",
33 title: "Teams",
34 section: "Workspace",
35 summary: "Groups of members, given roles on repositories together.",
36 why: "Give a group a role on many repositories at once, mention it, and request its review, instead of adding people one by one.",
37 plans: ["Teams with members and maintainers", "Repository roles for a team", "@team mentions and review requests"],
38 },
39 {
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales40 key: "board",
41 title: "Board",
A flat project menu with Code first, views as tabs, and Stripe for every owner42 section: "Workspace",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales43 summary: "Issues and pull requests as a board, a table or a roadmap, with fields of your own.",
Say what g1t does, not whom it is like44 why: "One view of everything in flight, arranged the way your team thinks about it. Agents move the cards as they work, so the board is never out of date.",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales45 plans: [
46 "Board, table and roadmap views of the same items, saved and shared",
47 "Custom fields: status, priority, size, iteration, dates, anything",
48 "Group and filter by owner, outcome, label, agent or state",
49 "Cards move by themselves as agents open, revise and land changes",
A flat project menu with Code first, views as tabs, and Stripe for every owner50 "Across projects: one board can hold work from any of the workspace's projects",
51 "Attach a board to a project, so it shows on that project too",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales52 ],
53 },
54 {
55 key: "roadmap",
56 title: "Roadmap",
A flat project menu with Code first, views as tabs, and Stripe for every owner57 section: "Workspace",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales58 summary: "Outcomes on a timeline, with their dependencies across projects.",
59 why: "An outcome is what should be true when the work is done. On a roadmap you see when each is expected, what it waits on in other projects, and how much has landed.",
60 plans: [
61 "Outcomes as bars on a timeline, from start to target",
62 "Progress from merged work, not from guesses",
63 "Dependencies across projects, drawn from the project graph",
64 "Slip warnings when the work left outgrows the time left",
65 ],
66 today: { label: "Outcomes", path: "plans" },
67 },
68 {
69 key: "milestones",
70 title: "Milestones",
A flat project menu with Code first, views as tabs, and Stripe for every owner71 section: "Issues",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales72 summary: "Dates to land outcomes by, with what is left and what is at risk.",
73 why: "A milestone groups the issues that must land together, by a date. g1t shows what remains and which agent or person holds each part.",
74 plans: [
75 "Issues and outcomes grouped under a due date",
76 "Burn-down from merged pull requests",
77 "At-risk items flagged before the date, not after",
78 ],
79 today: { label: "Issues", path: "issues" },
80 },
81
82 // --- Code ---------------------------------------------------------------
83 {
84 key: "compare",
85 title: "Compare",
86 section: "Code",
87 summary: "Any two branches, tags or commits, side by side.",
88 why: "See exactly what changed between two points, with the sessions and pull requests that changed it.",
89 plans: ["Diff any two refs", "The pull requests and agent sessions between them", "Open a pull request from the comparison"],
90 today: { label: "Commits", path: "commits" },
91 },
92 {
93 key: "docs",
94 title: "Docs",
95 section: "Code",
96 summary: "Pages about the project that agents keep current as the code changes.",
97 why: "A wiki goes stale the day it is written. g1t's docs live with the code, and when a change makes a page wrong, an agent proposes the fix in the same pull request.",
98 plans: [
99 "Pages written in Markdown, kept in the repository",
100 "Agents update pages a change makes wrong, in the same pull request",
101 "Architecture pages drawn from the code itself",
102 "Search across every project's docs",
103 ],
104 today: { label: "Files", path: "code" },
105 },
106
107 // --- Agents -------------------------------------------------------------
Agents and memory, checks and conflicts, profiles, slug renames, custom domains108 // At work, Sessions and Memory are built (see project-nav.ts), and so is
109 // the workspace's Agent fleet.
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales110 {
111 key: "playbooks",
112 title: "Playbooks",
113 section: "Agents",
114 summary: "How agents should work here: conventions, commands and checks.",
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API115 why: "Every project has its own way of doing things. Today every agent run already reads the repository's AGENTS.md and CLAUDE.md, at the root and in the directories it touches, and reviews read .g1t/review.md, all from the default branch. Playbooks build on those files with structure g1t can act on, not just read.",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales116 plans: [
117 "Instructions per kind of work: fixes, features, reviews, upgrades",
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API118 "Commands to build and test that g1t runs before every change, not just tells the agent about",
119 "Paths agents may not touch without a person, enforced on push",
120 "Learned from reviews: what people corrected becomes a proposed rule",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales121 ],
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API122 today: { label: "Instructions, on Agents", path: "agents" },
A flat project menu with Code first, views as tabs, and Stripe for every owner123 },
124
125 // --- Deployments ----------------------------------------------------------
126 {
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales127 key: "environments",
128 title: "Environments",
A flat project menu with Code first, views as tabs, and Stripe for every owner129 section: "Deployments",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales130 summary: "Staging, production and others, with approvers and branch rules.",
131 why: "Production and previews exist today. Environments add the rest: staging, QA, per-customer, each with its own variables, approvers and rules for what may deploy there.",
132 plans: [
133 "Named environments with their own variables and secrets",
134 "Required approvers before a deploy",
135 "Branch rules: what may deploy where",
136 "Promote a deployment from one environment to the next",
137 ],
138 today: { label: "Deployments", path: "deployments" },
139 },
140 {
141 key: "releases",
142 title: "Releases",
A flat project menu with Code first, views as tabs, and Stripe for every owner143 section: "Deployments",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales144 summary: "Tagged releases with notes written from what landed.",
145 why: "Release notes from the pull requests and sessions that made the release: what changed, why, and who or what changed it.",
146 plans: ["Notes drafted from merged work", "Assets and checksums attached", "Published to the project's page and a feed"],
147 today: { label: "Commits", path: "commits" },
148 },
Packages, with a container registry on g1t.sh; workspaces deleted whole and kept 30 days; Members for every member149
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales150 {
151 key: "flags",
152 title: "Feature flags",
A flat project menu with Code first, views as tabs, and Stripe for every owner153 section: "Deployments",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales154 summary: "Turn features on per environment or per user, without a deploy.",
155 why: "Ship code dark and turn it on when ready, for some users first, at the edge, with no deploy.",
156 plans: ["Flags read at the edge by deployed apps", "Rollouts by percentage, user or environment", "Flags cleaned up by agents when fully on"],
157 today: { label: "Deployments", path: "deployments" },
158 },
159
160 // --- Security -------------------------------------------------------------
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API161 // The overview, secret scanning and dependency upkeep are built: see
162 // routes/repo/security.tsx.
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales163 {
164 key: "code-scanning",
165 title: "Code scanning",
166 section: "Security",
167 summary: "Code scanned for vulnerabilities on every change.",
168 why: "Scanning on every pull request, with findings explained in the review and fixed by the author's agent.",
169 plans: ["Static analysis on every pull request", "Findings in the review, with a fix", "Baselines so only new findings block"],
170 },
171 {
172 key: "firewall",
173 title: "Firewall",
174 section: "Security",
175 summary: "Rules for who may reach the project's deployed apps.",
176 why: "Deployed apps run on Cloudflare. Rate limits, bot protection and IP rules, per app and environment.",
177 plans: ["Rate limits and bot protection", "IP and country rules", "Password-protected previews"],
178 today: { label: "Deployments", path: "deployments" },
179 },
180
181 // --- Observe ------------------------------------------------------------
182 {
183 key: "logs",
Observability gets its own page; tabs never overflow184 title: "Logs",
185 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales186 summary: "Requests, errors and CPU time of each deployment, and its logs.",
187 why: "Every deployed app's logs and numbers, by deployment, so a regression points at the change that caused it.",
188 plans: ["Live and searchable logs", "Requests, errors, latency and CPU by deployment", "Compare a preview with production"],
189 today: { label: "Deployments", path: "deployments" },
190 },
191 {
192 key: "errors",
Observability gets its own page; tabs never overflow193 title: "Errors",
194 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales195 summary: "Errors from the running app, each becoming an issue an agent can take.",
196 why: "An error in production should become a fix, not a dashboard. Each new error is grouped, explained, and turned into an issue with the context an agent needs.",
197 plans: ["Errors grouped with stack and request", "One click to an issue for an agent", "Incidents with a timeline and who was told"],
198 today: { label: "Issues", path: "issues" },
199 },
200 {
201 key: "uptime",
202 title: "Uptime",
Observability gets its own page; tabs never overflow203 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales204 summary: "Checks that the app answers, from around the world.",
205 why: "Know the app is down before your users tell you, and who was told.",
206 plans: ["Checks from many places", "Alerts by email and webhook", "A public status page"],
207 },
208 {
209 key: "analytics",
210 title: "Web analytics",
Observability gets its own page; tabs never overflow211 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales212 summary: "Who visits the deployed apps, without cookies.",
213 why: "Visits, pages and referrers for each app, private by design, from Cloudflare's own analytics.",
214 plans: ["Visits, pages, referrers and countries", "No cookies, no personal data", "Per deployment and per preview"],
215 },
216
217 // --- Insights -------------------------------------------------------------
218 {
219 key: "delivery",
220 title: "Delivery",
221 section: "Insights",
222 summary: "Lead time, deploy frequency, change failure rate and time to restore.",
223 why: "The four numbers that say how well a team ships, measured from what actually happened in g1t.",
224 plans: ["DORA metrics from merges and deployments", "Review and queue time", "Trends by week and by project"],
225 },
226 {
227 key: "costs",
228 title: "Costs",
229 section: "Insights",
230 summary: "What the project costs, by agent run, sandbox, build and app.",
231 why: "Usage is charged by the workspace; here it is broken down for one project, so you can see what each part of the work costs.",
232 plans: ["Cost by kind of work and by issue", "Cost per merged change", "Budgets per project"],
233 },
234 {
235 key: "impact",
236 title: "Agent impact",
237 section: "Insights",
238 summary: "How much of the work agents do, and how well.",
239 why: "The share of changes agents author, how often their work lands first time, and where people still step in.",
240 plans: ["Agents' share of merged changes", "First-time pass rate of checks and reviews", "Where people correct agents most"],
241 },
242];
243
244export function roadmapItem(key: string): RoadmapItem | undefined {
245 return ROADMAP.find((item) => item.key === key);
246}
247
248export function roadmapIn(section: RoadmapItem["section"]): RoadmapItem[] {
249 return ROADMAP.filter((item) => item.section === section);
250}