g1t/apps/web/app/lib/roadmap.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.
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 1 | /** |
| 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 | ||
| 10 | export 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 owner | 14 | /** |
| 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 | */ | |
| 18 | section: "Code" | "Issues" | "Agents" | "Deployments" | "Security" | "Insights" | "Workspace"; | |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 19 | /** 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 | ||
| 29 | export 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 owner | 34 | section: "Workspace", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 35 | summary: "Issues and pull requests as a board, a table or a roadmap, with fields of your own.", |
| 36 | why: "Like GitHub Projects: 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.", | |
| 37 | 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 owner | 42 | "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 sales | 44 | ], |
| 45 | }, | |
| 46 | { | |
| 47 | key: "roadmap", | |
| 48 | title: "Roadmap", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 49 | section: "Workspace", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 50 | 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 | { | |
| 61 | key: "milestones", | |
| 62 | title: "Milestones", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 63 | section: "Issues", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 64 | summary: "Dates to land outcomes by, with what is left and what is at risk.", |
| 65 | 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.", | |
| 66 | plans: [ | |
| 67 | "Issues and outcomes grouped under a due date", | |
| 68 | "Burn-down from merged pull requests", | |
| 69 | "At-risk items flagged before the date, not after", | |
| 70 | ], | |
| 71 | today: { label: "Issues", path: "issues" }, | |
| 72 | }, | |
| 73 | ||
| 74 | // --- Code --------------------------------------------------------------- | |
| 75 | { | |
| 76 | key: "branches", | |
| 77 | title: "Branches", | |
| 78 | section: "Code", | |
| 79 | summary: "Every branch: who is on it, how far behind it is, and its preview.", | |
| 80 | why: "With agents opening branches by the dozen, a list of names is not enough. Each branch shows its pull request, its checks, its live preview and how stale it is.", | |
| 81 | plans: [ | |
| 82 | "Branches with their pull request, checks and preview address", | |
| 83 | "Ahead and behind the default branch, with one-click catch-up by an agent", | |
| 84 | "Protection rules: required checks, reviews and the merge queue", | |
| 85 | "Stale branches cleaned up on a schedule you set", | |
| 86 | ], | |
| 87 | today: { label: "Pull requests", path: "pulls" }, | |
| 88 | }, | |
| 89 | { | |
| 90 | key: "tags", | |
| 91 | title: "Tags", | |
| 92 | section: "Code", | |
| 93 | summary: "Tags, and the releases made from them.", | |
| 94 | why: "A tag marks a version of the code. Each links to its release notes and to the deployment that shipped it.", | |
| 95 | plans: ["Tags with their commit, release and deployment", "Signed tags verified", "Rules for who may create and move them"], | |
| 96 | today: { label: "Commits", path: "commits" }, | |
| 97 | }, | |
| 98 | { | |
| 99 | key: "compare", | |
| 100 | title: "Compare", | |
| 101 | section: "Code", | |
| 102 | summary: "Any two branches, tags or commits, side by side.", | |
| 103 | why: "See exactly what changed between two points, with the sessions and pull requests that changed it.", | |
| 104 | plans: ["Diff any two refs", "The pull requests and agent sessions between them", "Open a pull request from the comparison"], | |
| 105 | today: { label: "Commits", path: "commits" }, | |
| 106 | }, | |
| 107 | { | |
| 108 | key: "docs", | |
| 109 | title: "Docs", | |
| 110 | section: "Code", | |
| 111 | summary: "Pages about the project that agents keep current as the code changes.", | |
| 112 | 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.", | |
| 113 | plans: [ | |
| 114 | "Pages written in Markdown, kept in the repository", | |
| 115 | "Agents update pages a change makes wrong, in the same pull request", | |
| 116 | "Architecture pages drawn from the code itself", | |
| 117 | "Search across every project's docs", | |
| 118 | ], | |
| 119 | today: { label: "Files", path: "code" }, | |
| 120 | }, | |
| 121 | ||
| 122 | // --- Agents ------------------------------------------------------------- | |
| 123 | { | |
| 124 | key: "agents", | |
| 125 | title: "At work", | |
| 126 | section: "Agents", | |
| 127 | summary: "Every agent at work on this project now, and a way to steer it.", | |
| 128 | why: "Agents are the project's busiest contributors. See each one live: what issue it holds, what it is doing this minute, what it has spent, and send it a word mid-run.", | |
| 129 | plans: [ | |
| 130 | "Live view of each running agent, with its current step", | |
| 131 | "Steer, pause or stop a run, and hand it to a person", | |
| 132 | "What each run has cost so far", | |
| 133 | "Your own agents and g1t's side by side", | |
| 134 | ], | |
| 135 | today: { label: "Pull requests", path: "pulls" }, | |
| 136 | }, | |
| 137 | { | |
| 138 | key: "sessions", | |
| 139 | title: "Sessions", | |
| 140 | section: "Agents", | |
| 141 | summary: "Every agent session that changed this project, searchable.", | |
| 142 | why: "When an agent writes a line, its reasoning is worth keeping. Every session is kept, searchable, and linked from the lines it wrote, so why-blame answers why the code is the way it is.", | |
| 143 | plans: [ | |
| 144 | "Every session, with its prompt, steps, tools and result", | |
| 145 | "Search by file, issue, agent or words", | |
| 146 | "Why-blame: from any line to the session that wrote it", | |
| 147 | "Sessions as context for the next agent on the same code", | |
| 148 | ], | |
| 149 | today: { label: "Commits", path: "commits" }, | |
| 150 | }, | |
| 151 | { | |
| 152 | key: "playbooks", | |
| 153 | title: "Playbooks", | |
| 154 | section: "Agents", | |
| 155 | summary: "How agents should work here: conventions, commands and checks.", | |
| 156 | why: "Every project has its own way of doing things. A playbook tells every agent how this one builds, tests, names things and what it must never touch, kept with the code and versioned with it.", | |
| 157 | plans: [ | |
| 158 | "Instructions per kind of work: fixes, features, reviews, upgrades", | |
| 159 | "Commands to build and test, run before every change", | |
| 160 | "Paths agents may not touch without a person", | |
| 161 | "Learned from reviews: what people corrected becomes a rule", | |
| 162 | ], | |
| 163 | today: { label: "Settings", path: "settings" }, | |
| 164 | }, | |
| 165 | { | |
| 166 | key: "memory", | |
| 167 | title: "Memory", | |
| 168 | section: "Agents", | |
| 169 | summary: "What agents have learned about this project, kept and curated.", | |
| 170 | why: "Agents that forget repeat mistakes. g1t keeps what they learn about the code, its quirks and its people, and lets you see, edit and delete it.", | |
| 171 | plans: ["Facts agents learned, with where they learned them", "Edit or remove anything", "Shared across every agent on the project"], | |
| 172 | }, | |
| 173 | ||
| 174 | { | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 175 | key: "fleet", |
| 176 | title: "Agent fleet", | |
| 177 | section: "Workspace", | |
| 178 | summary: "Every agent at work across the workspace, and what each is costing.", | |
| 179 | why: "Agents work on many projects at once. The fleet shows them all: what each holds, how far along it is, and where people are needed.", | |
| 180 | plans: [ | |
| 181 | "Every running agent across projects, live", | |
| 182 | "Queue of work waiting for an agent, by priority", | |
| 183 | "Spend by agent, project and kind of work", | |
| 184 | "Pause or redirect agents across the workspace", | |
| 185 | ], | |
| 186 | }, | |
| 187 | ||
| 188 | // --- Deployments ---------------------------------------------------------- | |
| 189 | { | |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 190 | key: "environments", |
| 191 | title: "Environments", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 192 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 193 | summary: "Staging, production and others, with approvers and branch rules.", |
| 194 | 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.", | |
| 195 | plans: [ | |
| 196 | "Named environments with their own variables and secrets", | |
| 197 | "Required approvers before a deploy", | |
| 198 | "Branch rules: what may deploy where", | |
| 199 | "Promote a deployment from one environment to the next", | |
| 200 | ], | |
| 201 | today: { label: "Deployments", path: "deployments" }, | |
| 202 | }, | |
| 203 | { | |
| 204 | key: "releases", | |
| 205 | title: "Releases", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 206 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 207 | summary: "Tagged releases with notes written from what landed.", |
| 208 | why: "Release notes from the pull requests and sessions that made the release: what changed, why, and who or what changed it.", | |
| 209 | plans: ["Notes drafted from merged work", "Assets and checksums attached", "Published to the project's page and a feed"], | |
| 210 | today: { label: "Commits", path: "commits" }, | |
| 211 | }, | |
| 212 | { | |
| 213 | key: "packages", | |
| 214 | title: "Packages", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 215 | section: "Workspace", |
| 216 | summary: "The workspace's package registry: npm, containers and more.", | |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 217 | why: "Publish packages from workflows to g1t's registry, with the same access as the code.", |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 218 | plans: ["npm, OCI containers, Cargo, PyPI and Go modules", "Published from any project's workflows", "Private packages for the workspace"], |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 219 | }, |
| 220 | { | |
| 221 | key: "flags", | |
| 222 | title: "Feature flags", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 223 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 224 | summary: "Turn features on per environment or per user, without a deploy.", |
| 225 | why: "Ship code dark and turn it on when ready, for some users first, at the edge, with no deploy.", | |
| 226 | plans: ["Flags read at the edge by deployed apps", "Rollouts by percentage, user or environment", "Flags cleaned up by agents when fully on"], | |
| 227 | today: { label: "Deployments", path: "deployments" }, | |
| 228 | }, | |
| 229 | ||
| 230 | // --- Security ------------------------------------------------------------- | |
| 231 | { | |
| 232 | key: "security", | |
| 233 | title: "Overview", | |
| 234 | section: "Security", | |
| 235 | summary: "Every security finding in one place, with the agent fixing each.", | |
| 236 | why: "Findings are worth something only when they are fixed. Each one here becomes an issue an agent takes, tested and landed through the merge queue.", | |
| 237 | plans: ["Findings by severity across scanners", "Each fixed by an agent through the queue", "A security policy and how to report to you"], | |
| 238 | }, | |
| 239 | { | |
| 240 | key: "secret-scanning", | |
| 241 | title: "Secret scanning", | |
| 242 | section: "Security", | |
| 243 | summary: "Keys and tokens found in the code or its history, revoked and removed.", | |
| 244 | why: "A leaked key is an incident. g1t blocks pushes that carry one, finds old ones in history, and helps revoke them.", | |
| 245 | plans: ["Push protection for known key formats", "History scanned for leaks", "Revocation with the provider, where it allows"], | |
| 246 | }, | |
| 247 | { | |
| 248 | key: "dependency-updates", | |
| 249 | title: "Dependency updates", | |
| 250 | section: "Security", | |
| 251 | summary: "Outdated and vulnerable packages, updated by agents.", | |
| 252 | why: "Like Dependabot, but the agent also fixes what the upgrade breaks, so updates land instead of piling up.", | |
| 253 | plans: ["Vulnerable packages first, then outdated ones", "Breaking changes fixed in the same pull request", "Grouped, scheduled and landed through the queue"], | |
| 254 | }, | |
| 255 | { | |
| 256 | key: "code-scanning", | |
| 257 | title: "Code scanning", | |
| 258 | section: "Security", | |
| 259 | summary: "Code scanned for vulnerabilities on every change.", | |
| 260 | why: "Scanning on every pull request, with findings explained in the review and fixed by the author's agent.", | |
| 261 | plans: ["Static analysis on every pull request", "Findings in the review, with a fix", "Baselines so only new findings block"], | |
| 262 | }, | |
| 263 | { | |
| 264 | key: "firewall", | |
| 265 | title: "Firewall", | |
| 266 | section: "Security", | |
| 267 | summary: "Rules for who may reach the project's deployed apps.", | |
| 268 | why: "Deployed apps run on Cloudflare. Rate limits, bot protection and IP rules, per app and environment.", | |
| 269 | plans: ["Rate limits and bot protection", "IP and country rules", "Password-protected previews"], | |
| 270 | today: { label: "Deployments", path: "deployments" }, | |
| 271 | }, | |
| 272 | ||
| 273 | // --- Observe ------------------------------------------------------------ | |
| 274 | { | |
| 275 | key: "logs", | |
| 276 | title: "Logs and metrics", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 277 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 278 | summary: "Requests, errors and CPU time of each deployment, and its logs.", |
| 279 | why: "Every deployed app's logs and numbers, by deployment, so a regression points at the change that caused it.", | |
| 280 | plans: ["Live and searchable logs", "Requests, errors, latency and CPU by deployment", "Compare a preview with production"], | |
| 281 | today: { label: "Deployments", path: "deployments" }, | |
| 282 | }, | |
| 283 | { | |
| 284 | key: "errors", | |
| 285 | title: "Errors and incidents", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 286 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 287 | summary: "Errors from the running app, each becoming an issue an agent can take.", |
| 288 | 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.", | |
| 289 | plans: ["Errors grouped with stack and request", "One click to an issue for an agent", "Incidents with a timeline and who was told"], | |
| 290 | today: { label: "Issues", path: "issues" }, | |
| 291 | }, | |
| 292 | { | |
| 293 | key: "uptime", | |
| 294 | title: "Uptime", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 295 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 296 | summary: "Checks that the app answers, from around the world.", |
| 297 | why: "Know the app is down before your users tell you, and who was told.", | |
| 298 | plans: ["Checks from many places", "Alerts by email and webhook", "A public status page"], | |
| 299 | }, | |
| 300 | { | |
| 301 | key: "analytics", | |
| 302 | title: "Web analytics", | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 303 | section: "Deployments", |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 304 | summary: "Who visits the deployed apps, without cookies.", |
| 305 | why: "Visits, pages and referrers for each app, private by design, from Cloudflare's own analytics.", | |
| 306 | plans: ["Visits, pages, referrers and countries", "No cookies, no personal data", "Per deployment and per preview"], | |
| 307 | }, | |
| 308 | ||
| 309 | // --- Insights ------------------------------------------------------------- | |
| 310 | { | |
| 311 | key: "delivery", | |
| 312 | title: "Delivery", | |
| 313 | section: "Insights", | |
| 314 | summary: "Lead time, deploy frequency, change failure rate and time to restore.", | |
| 315 | why: "The four numbers that say how well a team ships, measured from what actually happened in g1t.", | |
| 316 | plans: ["DORA metrics from merges and deployments", "Review and queue time", "Trends by week and by project"], | |
| 317 | }, | |
| 318 | { | |
| 319 | key: "costs", | |
| 320 | title: "Costs", | |
| 321 | section: "Insights", | |
| 322 | summary: "What the project costs, by agent run, sandbox, build and app.", | |
| 323 | 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.", | |
| 324 | plans: ["Cost by kind of work and by issue", "Cost per merged change", "Budgets per project"], | |
| 325 | }, | |
| 326 | { | |
| 327 | key: "impact", | |
| 328 | title: "Agent impact", | |
| 329 | section: "Insights", | |
| 330 | summary: "How much of the work agents do, and how well.", | |
| 331 | why: "The share of changes agents author, how often their work lands first time, and where people still step in.", | |
| 332 | plans: ["Agents' share of merged changes", "First-time pass rate of checks and reviews", "Where people correct agents most"], | |
| 333 | }, | |
| 334 | ]; | |
| 335 | ||
| 336 | export function roadmapItem(key: string): RoadmapItem | undefined { | |
| 337 | return ROADMAP.find((item) => item.key === key); | |
| 338 | } | |
| 339 | ||
| 340 | export function roadmapIn(section: RoadmapItem["section"]): RoadmapItem[] { | |
| 341 | return ROADMAP.filter((item) => item.section === section); | |
| 342 | } |