Skip to content
202 linesCodeBlameRaw

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 {
32 key: "board",
33 title: "Board",
A flat project menu with Code first, views as tabs, and Stripe for every owner34 section: "Workspace",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales35 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 like36 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 sales37 plans: [
38 "Board, table and roadmap views of the same items, saved and shared",
39 "Custom fields: status, priority, size, iteration, dates, anything",
40 "Group and filter by owner, outcome, label, agent or state",
41 "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 owner42 "Across projects: one board can hold work from any of the workspace's projects",
43 "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 sales44 ],
45 },
46 {
47 key: "roadmap",
48 title: "Roadmap",
A flat project menu with Code first, views as tabs, and Stripe for every owner49 section: "Workspace",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales50 summary: "Outcomes on a timeline, with their dependencies across projects.",
51 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.",
52 plans: [
53 "Outcomes as bars on a timeline, from start to target",
54 "Progress from merged work, not from guesses",
55 "Dependencies across projects, drawn from the project graph",
56 "Slip warnings when the work left outgrows the time left",
57 ],
58 today: { label: "Outcomes", path: "plans" },
59 },
60 {
Navigation: the workspace's own page with tabs, pins and recent in the sidebar61 key: "insights",
62 title: "Insights",
63 section: "Workspace",
64 summary: "How the whole workspace delivers: lead time, reviews, what agents do and what it costs, across every project.",
65 why: "Each project will have its own numbers. The workspace's put them side by side, so you can see which projects ship steadily, where work waits, and where the money goes.",
66 plans: [
67 "Delivery metrics for every project, side by side",
68 "Where work waits: review, the merge queue, checks",
69 "Agents' share of merged changes, and how often it lands first time",
70 "Cost by project, by kind of work and per merged change",
71 ],
72 },
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales73 // --- Code ---------------------------------------------------------------
Chat controls, public profiles, shadcn selects, and no Docs tab in a project74 // Nothing: code is not docs. Docs is its own workspace mode, filterable
75 // by project there, and a project never gets a Docs tab.
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales76
77 // --- Agents -------------------------------------------------------------
Agents and memory, checks and conflicts, profiles, slug renames, custom domains78 // At work, Sessions and Memory are built (see project-nav.ts), and so is
Agents mode: an overview of every agent's work and spend, and each agent's sessions, memory, routines, spend, activity and versions79 // the workspace's Agents overview.
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales80 {
81 key: "playbooks",
82 title: "Playbooks",
83 section: "Agents",
84 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 API85 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 sales86 plans: [
87 "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 API88 "Commands to build and test that g1t runs before every change, not just tells the agent about",
89 "Paths agents may not touch without a person, enforced on push",
90 "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 sales91 ],
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API92 today: { label: "Instructions, on Agents", path: "agents" },
A flat project menu with Code first, views as tabs, and Stripe for every owner93 },
94
95 // --- Deployments ----------------------------------------------------------
96 {
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales97 key: "environments",
98 title: "Environments",
A flat project menu with Code first, views as tabs, and Stripe for every owner99 section: "Deployments",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales100 summary: "Staging, production and others, with approvers and branch rules.",
101 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.",
102 plans: [
103 "Named environments with their own variables and secrets",
104 "Required approvers before a deploy",
105 "Branch rules: what may deploy where",
106 "Promote a deployment from one environment to the next",
107 ],
108 today: { label: "Deployments", path: "deployments" },
109 },
110 {
111 key: "flags",
112 title: "Feature flags",
A flat project menu with Code first, views as tabs, and Stripe for every owner113 section: "Deployments",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales114 summary: "Turn features on per environment or per user, without a deploy.",
115 why: "Ship code dark and turn it on when ready, for some users first, at the edge, with no deploy.",
116 plans: ["Flags read at the edge by deployed apps", "Rollouts by percentage, user or environment", "Flags cleaned up by agents when fully on"],
117 today: { label: "Deployments", path: "deployments" },
118 },
119
120 // --- Security -------------------------------------------------------------
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar121 // The overview, secret scanning, code scanning, vulnerabilities and the
122 // dependency graph are built: see routes/repo/security-*.tsx.
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales123 {
124 key: "firewall",
125 title: "Firewall",
126 section: "Security",
127 summary: "Rules for who may reach the project's deployed apps.",
128 why: "Deployed apps run on Cloudflare. Rate limits, bot protection and IP rules, per app and environment.",
129 plans: ["Rate limits and bot protection", "IP and country rules", "Password-protected previews"],
130 today: { label: "Deployments", path: "deployments" },
131 },
132
133 // --- Observe ------------------------------------------------------------
134 {
135 key: "logs",
Observability gets its own page; tabs never overflow136 title: "Logs",
137 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales138 summary: "Requests, errors and CPU time of each deployment, and its logs.",
139 why: "Every deployed app's logs and numbers, by deployment, so a regression points at the change that caused it.",
140 plans: ["Live and searchable logs", "Requests, errors, latency and CPU by deployment", "Compare a preview with production"],
141 today: { label: "Deployments", path: "deployments" },
142 },
143 {
144 key: "errors",
Observability gets its own page; tabs never overflow145 title: "Errors",
146 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales147 summary: "Errors from the running app, each becoming an issue an agent can take.",
148 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.",
149 plans: ["Errors grouped with stack and request", "One click to an issue for an agent", "Incidents with a timeline and who was told"],
150 today: { label: "Issues", path: "issues" },
151 },
152 {
153 key: "uptime",
154 title: "Uptime",
Observability gets its own page; tabs never overflow155 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales156 summary: "Checks that the app answers, from around the world.",
157 why: "Know the app is down before your users tell you, and who was told.",
158 plans: ["Checks from many places", "Alerts by email and webhook", "A public status page"],
159 },
160 {
161 key: "analytics",
162 title: "Web analytics",
Observability gets its own page; tabs never overflow163 section: "Observability",
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales164 summary: "Who visits the deployed apps, without cookies.",
165 why: "Visits, pages and referrers for each app, private by design, from Cloudflare's own analytics.",
166 plans: ["Visits, pages, referrers and countries", "No cookies, no personal data", "Per deployment and per preview"],
167 },
168
169 // --- Insights -------------------------------------------------------------
170 {
171 key: "delivery",
172 title: "Delivery",
173 section: "Insights",
174 summary: "Lead time, deploy frequency, change failure rate and time to restore.",
175 why: "The four numbers that say how well a team ships, measured from what actually happened in g1t.",
176 plans: ["DORA metrics from merges and deployments", "Review and queue time", "Trends by week and by project"],
177 },
178 {
179 key: "costs",
180 title: "Costs",
181 section: "Insights",
182 summary: "What the project costs, by agent run, sandbox, build and app.",
183 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.",
184 plans: ["Cost by kind of work and by issue", "Cost per merged change", "Budgets per project"],
185 },
186 {
187 key: "impact",
188 title: "Agent impact",
189 section: "Insights",
190 summary: "How much of the work agents do, and how well.",
191 why: "The share of changes agents author, how often their work lands first time, and where people still step in.",
192 plans: ["Agents' share of merged changes", "First-time pass rate of checks and reviews", "Where people correct agents most"],
193 },
194];
195
196export function roadmapItem(key: string): RoadmapItem | undefined {
197 return ROADMAP.find((item) => item.key === key);
198}
199
200export function roadmapIn(section: RoadmapItem["section"]): RoadmapItem[] {
201 return ROADMAP.filter((item) => item.section === section);
202}