flagon-io/g1t

public

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

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

342 lines16,025 bytesCodeBlame
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
10export type RoadmapItem = {
11 /** In the address: `/<owner>/<project>/soon/<key>`. */
12 key: string;
13 title: string;
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" | "Observability" | "Security" | "Insights" | "Workspace";
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
29export const ROADMAP: RoadmapItem[] = [
30 // --- Work ---------------------------------------------------------------
31 {
32 key: "board",
33 title: "Board",
34 section: "Workspace",
35 summary: "Issues and pull requests as a board, a table or a roadmap, with fields of your own.",
36 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.",
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",
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",
44 ],
45 },
46 {
47 key: "roadmap",
48 title: "Roadmap",
49 section: "Workspace",
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",
63 section: "Issues",
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 {
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 {
190 key: "environments",
191 title: "Environments",
192 section: "Deployments",
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",
206 section: "Deployments",
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",
215 section: "Workspace",
216 summary: "The workspace's package registry: npm, containers and more.",
217 why: "Publish packages from workflows to g1t's registry, with the same access as the code.",
218 plans: ["npm, OCI containers, Cargo, PyPI and Go modules", "Published from any project's workflows", "Private packages for the workspace"],
219 },
220 {
221 key: "flags",
222 title: "Feature flags",
223 section: "Deployments",
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: "Updates that land instead of piling up: the agent upgrades the package and fixes whatever the upgrade breaks, in the same pull request.",
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",
277 section: "Observability",
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",
286 section: "Observability",
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",
295 section: "Observability",
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",
303 section: "Observability",
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
336export function roadmapItem(key: string): RoadmapItem | undefined {
337 return ROADMAP.find((item) => item.key === key);
338}
339
340export function roadmapIn(section: RoadmapItem["section"]): RoadmapItem[] {
341 return ROADMAP.filter((item) => item.section === section);
342}