| 1 | --- |
| 2 | title: Home |
| 3 | description: Your workspace's front page. The past week in four figures, the daily signal (what your work says today, with the evidence), where you're needed now, what happened since you were last here in plain English, what is running, and the one item to start with. How every number is worked out. |
| 4 | --- |
| 5 | |
| 6 | **Home** is the first page of your workspace, at `/<workspace>/-/home`. |
| 7 | Across the top is [the past week](#the-past-week) in four figures, each |
| 8 | against the week before. Under it, the main column is read top to |
| 9 | bottom: |
| 10 | |
| 11 | 1. **[The daily signal](#the-daily-signal)**: what the workspace's work |
| 12 | says today. Its headline is the finding that matters most, and the |
| 13 | others follow, each a sentence with its evidence and where to see it. |
| 14 | Under them is a box that [asks g1t](#ask-from-home) about any of it. |
| 15 | 2. **Where you're needed**: everything waiting on you, however long ago |
| 16 | it started, with the action beside each item. Its first row is |
| 17 | [Start here](#start-here), the one item to do first, and why. |
| 18 | 3. **Since you were last here**: one card for the span. It shows what people |
| 19 | did, what changed in plain English when you ask for it, and what landed, |
| 20 | each change with whether it is live yet. |
| 21 | |
| 22 | The side column stays in view as you scroll: |
| 23 | |
| 24 | - **[Running now](#running-now)**: workflow runs and builds still going. |
| 25 | - **[Spent](#spent)**: what the span cost, and the month so far. |
| 26 | - **[Settled for you](#settled-for-you)**: what finished by itself. |
| 27 | |
| 28 | On a phone it is one column: the past week, the daily signal, Where |
| 29 | you're needed, Running now, the span, then Spent and Settled for you. |
| 30 | |
| 31 | For a workspace's owners, Home also opens |
| 32 | [Getting started](/guides/workspaces/#getting-started), the setup guide, |
| 33 | until they finish or close it. The **Getting started** button at the top |
| 34 | of Home opens it again at any time, as `?setup=1` does. |
| 35 | |
| 36 | Every number on the page comes from what g1t has recorded. Nothing is |
| 37 | estimated, and nothing compares your workspace or its teams with anyone |
| 38 | else's: each figure is set against your own last weeks. When a part of g1t does not answer, the section it feeds says |
| 39 | so, and the rest of the page still shows. Only what you ask g1t is written |
| 40 | by a model: [What changed](#what-changed) and the answers in Ask. |
| 41 | |
| 42 | ## The past week |
| 43 | |
| 44 | Four figures for the last seven UTC days. Each shows how it moved since the |
| 45 | seven days before (green when that is good news, red when it is not) and a |
| 46 | line over the last ten weeks. Point at the line, or focus it and use the |
| 47 | arrow keys, to read any week. Each figure opens the page behind it. |
| 48 | |
| 49 | | Figure | What it counts | |
| 50 | | --- | --- | |
| 51 | | **Agent-authored merges** | Pull requests that merged in the week and were an [agent's](#whose-work-is-an-agents). | |
| 52 | | **Spend per agent merge** | The week's agent [usage](/guides/usage-and-billing/#the-usage-page) at price, plus what the [sessions](/guides/sessions/) started in it cost (estimated at list price from their token usage), divided by the agent pull requests that merged in it: an average, not what any one cost. A dash when usage can't be read or nothing an agent made merged. | |
| 53 | | **Stalled changes** | Pull requests open at the end of each week (now, for this one), opened three days or more before, with nothing in the three days before: no push, comment, review, timeline event, check or session. Drafts count. | |
| 54 | | **Agent rework rate** | Of the agent pull requests that merged in the week, the share a person asked for changes on before they merged. | |
| 55 | |
| 56 | ### Whose work is an agent's |
| 57 | |
| 58 | A pull request is an agent's when g1t's agent opened it, it was opened as |
| 59 | an agent's, or a [session](/guides/sessions/) is tied to it: linked to it, |
| 60 | started for it, or pushing its branch. Its owner is the person who asked |
| 61 | for it, else its author, so an agent's work counts toward the person it |
| 62 | was for. |
| 63 | |
| 64 | ## The daily signal |
| 65 | |
| 66 | First the day, then one sentence for the finding that matters most today, |
| 67 | then the others. Each finding names its evidence in a line of figures, |
| 68 | links to where you can see it, and has **Ask g1t**, which asks |
| 69 | [Ask](/guides/ask/) to look into it. A finding with a trend has its line |
| 70 | beside it. When nothing stands out, the headline says what the week did. |
| 71 | |
| 72 | | Finding | When it shows | |
| 73 | | --- | --- | |
| 74 | | **Work items waiting on one unreviewed change** | An open pull request no one has reviewed is for a work item that other open work items are blocked by. The one holding up the most leads. | |
| 75 | | **Agent drafts waiting for review** | This week's first reviews waited at least four times as long as agents took to open the pull requests (from their session starting), and at least four hours. Without that gap: first reviews took half as long again as the weeks before. | |
| 76 | | **A milestone shipped** | A milestone closed in the last seven days, against its due date, with its weeks in build, its merged pull requests and its projects. | |
| 77 | | **Where agent spend is going** | More than a third of the quarter's agent spend by pull request went into one milestone (else one work item, else one project). Spend is g1t's usage on each pull request and its share of its sessions' cost. | |
| 78 | | **Stalled changes rising** | At least three more stalled changes than last week, and a quarter more. | |
| 79 | | **Agent rework moving** | People asked for changes on agents' merged work at least 8 points more, or less, often than over the four weeks before (with five agent merges or more). | |
| 80 | | **A practice catching on** | Two or more people started using a harness (Claude Code, Codex, Cursor and so on) this month, at least two weeks after the first person did. | |
| 81 | | **Who works where** | Someone started merging to a project one person has carried (three quarters of its last 90 days' merges), or merged to a project for the first time this week after work elsewhere. | |
| 82 | |
| 83 | Findings are ordered by how much they hold up: blocked work first, then |
| 84 | waits, then what shipped and where spend went. Up to five show, and the |
| 85 | rest are one click away. What the work says is read again at most every |
| 86 | five minutes for each person, so a figure can be up to five minutes |
| 87 | behind. The same reads, at more length, are on the |
| 88 | [workspace overview](/guides/workspaces/#the-workspace-overview). |
| 89 | |
| 90 | ## Ask from Home |
| 91 | |
| 92 | The box under the daily signal asks g1t anything about your work. Type a question and |
| 93 | press **Enter** (**Shift+Enter** starts a new line): the top bar's |
| 94 | [Ask](/guides/ask/) panel opens and sends it, and the answer streams in |
| 95 | there. Under the box are questions to start with: |
| 96 | |
| 97 | | Starter | What it does | |
| 98 | | --- | --- | |
| 99 | | **Summarize what changed since I was last here** | Writes a summary of the span into [What changed](#what-changed), further down the page, and brings it into view. Over another span it says so, such as **Summarize what changed in the last 7 days** | |
| 100 | | **What needs me first?** | Asks which things need you, most urgent first, one line each on what to do | |
| 101 | | **What shipped today?** | Asks what shipped today: what is live, what is still deploying, and what failed | |
| 102 | | **Who's working on what?** | Asks who is working on what right now, and whether anything is stuck | |
| 103 | |
| 104 | Everything you ask from Home goes to your |
| 105 | [direct message with @g1t](/guides/ask/#one-conversation-in-ask-and-in-chat), |
| 106 | as a question asked in Ask does, so you can carry on from it in Ask or in |
| 107 | Chat. It answers with your workspace's own AI provider, so an owner has to |
| 108 | [set Ask up](/guides/ask/#set-it-up) first. Until then, or while g1t is |
| 109 | still answering an earlier question, the panel opens with your question |
| 110 | in its box rather than sending it, so nothing you typed is lost. |
| 111 | |
| 112 | ## Where you're needed |
| 113 | |
| 114 | This list has no time window: something that started waiting a week ago |
| 115 | is here until you deal with it. Each row says what it is, what is at |
| 116 | stake, how long it has waited, and has its action beside it. |
| 117 | |
| 118 | | Source | Rows | |
| 119 | | --- | --- | |
| 120 | | Code | A failed production build; your open pull request that can't land until you act (it conflicts, a required check fails, someone asked for changes, approvals are missing); your pull request that meets everything its branch asks for, ready for you to merge; a review asked of you by name; an invitation to a repository; a job waiting for a self-hosted runner | |
| 121 | | Notifications | An unread notification in this workspace that is a warning (someone or something is waiting) or a failure. One whose cause is over, such as a workflow that has passed since or a pull request that merged, has [settled](/guides/notifications/#threads-that-settle-themselves) and is not here | |
| 122 | | Chat | A conversation that mentions you, or a direct message you haven't read. Muted conversations are left out | |
| 123 | |
| 124 | A notification about something already on the list, such as a pull |
| 125 | request whose row is there, is left out. |
| 126 | |
| 127 | Each row's button takes you to the place where you act on it: **See the |
| 128 | build** for a failed production build, **Review** for a review asked of |
| 129 | you, **Respond** for an invitation, **Look** for a job waiting for a |
| 130 | runner or your pull request that can't land (**Review** when it waits |
| 131 | for a verdict), **Reply** for a message, and |
| 132 | **Open** for a notification. Your pull request that is ready to merge, |
| 133 | marked **Ready to merge**, says **Open** too: it opens the pull request, |
| 134 | where you merge it. Nothing on Home merges on the spot. |
| 135 | |
| 136 | Rows are ordered most pressing first, by tier, then by how long each has |
| 137 | waited, longest first: |
| 138 | |
| 139 | 1. A failed production build. |
| 140 | 2. Your pull request that can't land until you act on it. |
| 141 | 3. Finished work that only waits for you: your pull request to merge, a |
| 142 | review, an invitation. |
| 143 | 4. Something that may be stuck: a job without a runner. |
| 144 | 5. Unread warnings and failures in your notifications. |
| 145 | 6. Mentions and direct messages. |
| 146 | |
| 147 | The list shows the first eight rows; **Show more** opens the rest. The |
| 148 | sentence under the page's heading starts with how many things need you. |
| 149 | |
| 150 | ## Start here |
| 151 | |
| 152 | **Start here** is the first row of Where you're needed, set apart at the |
| 153 | top: the most pressing tier, and within it the row that has waited |
| 154 | longest. g1t picks it with that rule, so the same rows always give the |
| 155 | same pick. It says why, such as "Everything it needs is met; it lands when |
| 156 | you merge it." When others in its tier are waiting too, it adds that this |
| 157 | one has waited longest. Beside its button are what is at stake, how long |
| 158 | it has waited, and who is on it. |
| 159 | |
| 160 | Its title links to what it picked: the pull request, work item or build. The |
| 161 | button opens the same place. For a pull request (one ready to |
| 162 | merge, a review asked of you, or yours that is stuck) it says **Open pull |
| 163 | request**; you merge or review there. For anything else it names the |
| 164 | action, such as **See the build** or **Respond**. |
| 165 | |
| 166 | ## Since you were last here |
| 167 | |
| 168 | Home remembers when you were last on it, for each workspace, with your |
| 169 | account, so it is the same on your laptop and your phone. The span's card |
| 170 | covers what happened since then, and its heading says the span |
| 171 | in words, such as **Since Tuesday evening · 2 days** or **Since 40 |
| 172 | minutes ago**. |
| 173 | |
| 174 | | Switch | What it covers | |
| 175 | | --- | --- | |
| 176 | | **Since last visit** | From the end of your last visit to now. The default. | |
| 177 | | **Last 24 hours** | The 24 hours up to now. | |
| 178 | | **Last 7 days** | The 7 days up to now. | |
| 179 | |
| 180 | The switch is part of the address (`?window=24h`, `?window=7d`), so you |
| 181 | can bookmark a span. |
| 182 | |
| 183 | How a visit is counted: |
| 184 | |
| 185 | - A visit counts once the page has been in view for five seconds. A quick |
| 186 | refresh does not count, so it never wipes what you haven't looked at. |
| 187 | - What it records is when the page loaded, so anything that happens while |
| 188 | you are reading shows next time. |
| 189 | - Visits less than 30 minutes apart are one visit. Going to a pull request |
| 190 | and coming back, or refreshing, keeps the same span until you have been |
| 191 | away for half an hour. |
| 192 | - With no visit on record, Home shows the last 24 hours and says so. After |
| 193 | more than 14 days away, it shows the last 14 days. |
| 194 | |
| 195 | The sentence under the heading sums it up, for example: |
| 196 | |
| 197 | > 8 things need you. Since Tuesday evening, 3 people pushed 41 commits and |
| 198 | > merged 5 changes, and 12 changes landed. |
| 199 | |
| 200 | It says what people did first (the commits they pushed and the changes |
| 201 | they merged; if neither, the messages they sent), then everything that |
| 202 | [landed](#landed). When nothing at |
| 203 | all was counted, it says so plainly: |
| 204 | |
| 205 | > Quiet since Tuesday evening: nothing pushed, merged, deployed or said. |
| 206 | |
| 207 | When Code and Chat both failed to answer, the sentence ends with "what |
| 208 | people did couldn't be read" rather than reading as quiet. |
| 209 | |
| 210 | ### What changed |
| 211 | |
| 212 | **What changed**, at the top of the span's card, has g1t tell you what happened in the |
| 213 | span in plain English: what changed, why, and what is live. It is not |
| 214 | written until you ask, since each summary is a call to your workspace's |
| 215 | AI provider: |
| 216 | |
| 217 | 1. Choose **Summarize** on the card, or the |
| 218 | [starter](#ask-from-home) **Summarize what changed since I was last |
| 219 | here** at the top of the page. |
| 220 | 2. g1t's summary streams into the card as it is written. It reads g1t as |
| 221 | you, as [Ask](/guides/ask/#what-it-can-read) does, so it covers only |
| 222 | what you can see. |
| 223 | 3. When it is finished: |
| 224 | - **Ask a follow-up** opens the top bar's Ask on the same |
| 225 | conversation, so you can ask about anything in the summary. |
| 226 | - **Summarize again** writes a new one. |
| 227 | - **In your direct message with g1t** opens the conversation in Chat, |
| 228 | where the summary is kept. |
| 229 | |
| 230 | The question g1t is sent reads as you would ask it, with the span's start |
| 231 | in your time zone: "Summarize what changed since I was last here (2:12 |
| 232 | PM) in plain English." Choosing another span with the switch starts it |
| 233 | over. When Ask is not set up, the card says so: owners get a link to |
| 234 | connect a provider and choose it for Ask, and members are told to ask an |
| 235 | owner. |
| 236 | |
| 237 | ### People |
| 238 | |
| 239 | Under What changed, **People** shows what people did in the span, one line |
| 240 | per kind of thing with its count, and each line opens the place that lists |
| 241 | them: a project's Activity tab for pushes, its pull requests, **Work** for |
| 242 | work items, Artifacts, Chat. Beside the heading are the faces of the five most active, |
| 243 | and how many more there were. |
| 244 | |
| 245 | | Line | What counts | From | |
| 246 | | --- | --- | --- | |
| 247 | | *3 people pushed 41 commits to 4 projects* | Every push to a branch of one of the workspace's repositories (`git.push`; tags are not pushes). The commits are the ones each push brought to its branch, along the branch's first-parent line from where it is now back to where it was, at most 50, and one for a new branch. A push recorded before commits were counted counts as one commit. | Events | |
| 248 | | *opened 2 pull requests, merged 5, closed 1 without merging* | `pull.opened`, `pull.merged`, `pull.closed` | Events | |
| 249 | | *reviewed 3 pull requests* | A review is a comment with a verdict | Events | |
| 250 | | *opened 4 work items, closed 6* | `work_item.opened`, `work_item.closed` | Events | |
| 251 | | *left 9 comments* | `comment.created` without a verdict | Events | |
| 252 | | *2 deploys went out, 1 failed* | `deployment.succeeded` and `deployment.failed`, by who set the build off | Events | |
| 253 | | *published 1 release*, *published 2 package versions* | `release.published`, `package.published` | Events | |
| 254 | | *created 1 doc, edited 7 docs* | Artifacts made (`folio.created`), and artifacts whose content changed (`folio.updated`): each artifact once, and everyone whose changes a version holds edited it. "Docs" when every one is a doc, else "artifacts". Counts only: Home never shows an artifact's title here. | Events | |
| 255 | | *sent 120 messages in 5 conversations* | Text messages and thread replies that were not deleted, in the conversations you can read: every public channel, and the private channels and direct messages you are in. Conversations are those with at least one message. | Chat | |
| 256 | |
| 257 | A push an import made names nobody, so it is counted without a face. |
| 258 | |
| 259 | It says when it has nothing to show, and names the part that didn't |
| 260 | answer (Code or Chat) so an empty list never reads as a quiet day. |
| 261 | |
| 262 | ### Landed |
| 263 | |
| 264 | The rest of the span's card is everything that landed in the span, |
| 265 | newest first: |
| 266 | |
| 267 | | Row | What it is | |
| 268 | | --- | --- | |
| 269 | | A pull request merged | With who wrote it, and who merged it when that was someone else | |
| 270 | | A push to a default branch | One row per push a person made straight to a default branch: its commit's first line when it brought one, else how many commits, and who pushed. For the ten projects pushed to most in the span; past those, one row per project with how many commits and pushes | |
| 271 | | A production build | Only one that no merge or push on the list already speaks for: a redeploy, a rollback, a build of a project whose pushes weren't read, or one that failed. A build that shipped a merge is that merge's [live label](#live-after-merge), not a row of its own. Previews stay on the project's Deployments | |
| 272 | | A release published | Its tag and name, and who released it | |
| 273 | | A package version published | Its name and version, and who published it | |
| 274 | |
| 275 | Its line counts them by kind, and how many of the merges and pushes are |
| 276 | live, deploying, waiting to deploy, or failed to deploy. The first five |
| 277 | show; **Show more** opens the rest. Over **Last 7 days** the rows are |
| 278 | grouped by day (**Today**, **Yesterday**, **Sun, Oct 11**), five of each |
| 279 | day showing. |
| 280 | |
| 281 | #### Explain a change |
| 282 | |
| 283 | Every row has an **Explain** button (the sparkle beside its time, |
| 284 | "Explain this change in plain English"). It opens the top bar's |
| 285 | [Ask](/guides/ask/) and asks g1t about that one change: |
| 286 | |
| 287 | | Row | What g1t is asked | |
| 288 | | --- | --- | |
| 289 | | A merge or a push | "Explain pull request #47 in acme/web in plain English: what changed, why, and is it live?" (or the commit, for a push) | |
| 290 | | A production build | What went out in that deployment | |
| 291 | | A release or a package version | What's new in it | |
| 292 | |
| 293 | The answer is kept in your direct message with @g1t, like everything you |
| 294 | [ask from Home](#ask-from-home). |
| 295 | |
| 296 | #### Live after merge |
| 297 | |
| 298 | Each merge and push says whether it is live yet, for a project that |
| 299 | deploys to production. Landing on `main` is not shipping: a change is |
| 300 | shipped once a production deployment that contains it succeeds. |
| 301 | |
| 302 | | Label | When | |
| 303 | | --- | --- | |
| 304 | | **Live 9 min after merge** | A production deployment that succeeded shipped it, this long after it landed. The label opens that deployment, or the workflow run that deployed it | |
| 305 | | **Deploying** | A production deployment after it is under way | |
| 306 | | **Deploy failed** | The production deployment after it failed, and none has shipped it since | |
| 307 | | **Waiting to deploy** | Nothing has deployed it yet | |
| 308 | |
| 309 | How g1t knows: when a production deployment succeeds, a |
| 310 | [g1t.page build](/guides/deployments/) or one a workflow or the API |
| 311 | reported, g1t reads its commit's history back and writes down each |
| 312 | commit no production deployment shipped before as shipped by this one. |
| 313 | So a commit's first production deployment is the one that took it live, |
| 314 | and a rollback to an older commit ships nothing new. Home reads only what |
| 315 | was written down, so this costs nothing when the page loads. A change |
| 316 | that landed before g1t began writing this down for its project goes live |
| 317 | with the first production deployment that succeeded after it. |
| 318 | |
| 319 | #### Made with an agent |
| 320 | |
| 321 | A merge or push made in a harness session, such as Claude Code working |
| 322 | for you, carries the agent marker beside its title; it opens the |
| 323 | session. A pull request is marked when a session is tied to it (it |
| 324 | pushed the branch, named the pull request, or a commit on it carries a |
| 325 | `G1t-Session:` trailer); a push when one of its commits carries the |
| 326 | trailer. The change is still yours, and stays in the same list. When one of its sources (pull |
| 327 | requests, pushes and releases, deployments) didn't answer, the card says |
| 328 | so under the list. |
| 329 | |
| 330 | ## Running now |
| 331 | |
| 332 | At the top of the side column, what is going right now, longest-going |
| 333 | first, each with its state and how long it has gone: |
| 334 | |
| 335 | | Kind | What it is | |
| 336 | | --- | --- | |
| 337 | | Workflow run | A [workflow](/guides/actions/) run that is queued, waiting, running, or waiting for approval, in the ten projects pushed to most in the span (their newest 20 runs each) | |
| 338 | | Build | A project's newest build, queued or building | |
| 339 | |
| 340 | ## Spent |
| 341 | |
| 342 | In the side column: what the workspace spent over the span, from its |
| 343 | [statement](/guides/usage-and-billing/), with each line at its price: what |
| 344 | was charged plus what your plan's included usage, a trial, a pool or a |
| 345 | discount paid of it. The lines are the statement's kinds of charge, such |
| 346 | as **Runner minutes, 2-core**, **Self-hosted runner time** and |
| 347 | **Deployments**, most first. Payments, credits, refunds and tax |
| 348 | are money in, not spend, and are left out. Under the total are the days |
| 349 | counted and the month so far, at price. |
| 350 | |
| 351 | The statement keeps whole days, midnight to midnight UTC, so spend counts |
| 352 | from the start of the UTC day the span began: a span since 3 p.m. UTC |
| 353 | yesterday counts all of yesterday. Usage that g1t measures through the |
| 354 | month, such as hosting requests and storage, shows on the day it is added |
| 355 | to the statement. |
| 356 | |
| 357 | ## Settled for you |
| 358 | |
| 359 | At the bottom of the side column: your notifications in this workspace |
| 360 | that [settled themselves](/guides/notifications/#threads-that-settle-themselves) |
| 361 | in the span, newest first, each with why, such as **CI passed in run 330** |
| 362 | or **Merged by @ana**: a later run passed, the pull request merged, the |
| 363 | deployment went out. One you marked done yourself is not counted. **Done** |
| 364 | opens the notifications that are done. |
| 365 | |
| 366 | ## While the page is open |
| 367 | |
| 368 | Home keeps up with the workspace without a reload. What lands, starts |
| 369 | running, finishes or comes to need you while you are on the page joins its |
| 370 | list, sliding in at its place and lit for a moment; counts and the |
| 371 | sentence under the heading update with it. Runs that finish leave Running |
| 372 | now. |
| 373 | |
| 374 | | Home updates when | From | |
| 375 | | --- | --- | |
| 376 | | Commits are pushed to a project's default branch, or a tag is pushed | The workspace's projects (the first 25) | |
| 377 | | A pull request is opened, reviewed, merged or closed, a comment changes, or a work item linked to one of them changes | The same projects | |
| 378 | | A workflow run or a job in it starts or finishes, a build or deployment moves, or a release or package is published | The same projects | |
| 379 | | A [session](/work/sessions/) starts or ends | The same projects | |
| 380 | | Something comes to need you, or you deal with it elsewhere | Your notifications | |
| 381 | |
| 382 | A busy workspace sends changes all the time, so Home refreshes a second |
| 383 | after the last one and at most every five seconds. It works like the |
| 384 | [pages that update live](/guides/notifications/#pages-that-update-live): |
| 385 | never while you are typing in Ask or have a dialog open, and a tab out of |
| 386 | view catches up when you come back to it. Pushes to other branches and a |
| 387 | commit's checks don't refresh Home, because it doesn't show them. Spend |
| 388 | updates with the rest but changes only as usage is metered. |
| 389 | |
| 390 | Refreshing in place keeps the same span: it is the same visit. |
| 391 | |
| 392 | ## Without Code access |
| 393 | |
| 394 | A member whose membership does not include Code sees Home without anything |
| 395 | from Code: |
| 396 | |
| 397 | - The past week and the daily signal are not shown. The page opens with |
| 398 | **What are we building today?** and the box that asks g1t. |
| 399 | - People shows what was said and the artifacts edited; nothing from |
| 400 | repositories. |
| 401 | - Where you're needed has no rows from Code, and no notifications about a |
| 402 | repository. |
| 403 | - Landed and Running now are not shown. |
| 404 | - Spent is the same for every member. |
| 405 | |
| 406 | ## When something doesn't answer |
| 407 | |
| 408 | Each section reads its own part of g1t and shows as soon as it has it. |
| 409 | When one does not answer: |
| 410 | |
| 411 | - Where you're needed and Running now name the parts that didn't answer, |
| 412 | so an empty list never reads as nothing waiting. |
| 413 | - People counts what could be read, and names the part that is missing |
| 414 | (Code or Chat). If nothing could be read, the card says so, and the |
| 415 | sentence under the heading says what people did couldn't be read. |
| 416 | - Landed and Spent each say their part didn't answer. When |
| 417 | deployments or sessions can't be read, Landed shows its rows without |
| 418 | their live labels or agent markers. |
| 419 | - Settled for you says when your notifications can't be read. |
| 420 | - The daily signal says when the work couldn't be read, and the past week |
| 421 | is left out. When some projects didn't answer, it says its findings |
| 422 | leave them out. |
| 423 | - What changed says when Ask can't be reached or isn't set up, or when |
| 424 | the question could not be sent. |
| 425 | - If your last visit can't be read, the span is the last 24 hours and the |
| 426 | page says why. |
| 427 | |
| 428 | When a list g1t reads is longer than it reads at once (100 pull requests |
| 429 | per project and state, 50 projects, builds |
| 430 | of 20 projects, 5,000 events of the span), the page says that some work |
| 431 | may be missing or some counts are low. |
| 432 | |
| 433 | ## How it scales |
| 434 | |
| 435 | Every event in g1t is in one log, and its ids sort by time, so a span is a |
| 436 | range of ids. Home asks the events service for one digest of the span: for |
| 437 | each of the workspace's repositories (the first 50) and each kind of event |
| 438 | it counts, that is one range scan of an index on repository, type and id, |
| 439 | and the workspace's artifact events are the same range under no |
| 440 | repository. A busy week of tens of repositories is a few thousand rows, |
| 441 | read in one round trip; chat's count is one query over the conversations |
| 442 | you can read. When a workspace has hundreds of repositories, the next step |
| 443 | is a daily rollup per workspace that the digest reads instead of the log. |
| 444 | It is not built yet. |
| 445 | |
| 446 | ## For services: activity_digest and activity |
| 447 | |
| 448 | Home's counts come from two methods other services can call too. |
| 449 | |
| 450 | **`activity_digest`** on the events service (`repo_ids`, `workspace`, |
| 451 | `from`, `until`; RFC 3339, `[from, until)`; the caller has checked the |
| 452 | viewer may read each repository) returns, per repository that had any |
| 453 | event: `pushes` (`count`, `commits`, `branches`, `by` with each actor's |
| 454 | pushes and commits, and `default_branch` with the same for pushes straight |
| 455 | to it and `last_at`), `pulls` (`opened`, `merged`, `closed`), `work_items` |
| 456 | (`opened`, `closed`, for the work items linked to it), `reviews`, `comments`, `deployments` (`succeeded`, |
| 457 | `failed`, `production`), `releases` and `packages` (newest first, at most |
| 458 | 50 each); and for the workspace named, `folios` (`created`, `edited` with |
| 459 | each folio's authors, `edited_count`). Every count by actor is a list of |
| 460 | `{ actor, count }`, where `actor` is a member key: `user:<id>` for an |
| 461 | account (g1t is `user:usr_g1t_agent`), `agent:<id>` for an agent, or |
| 462 | empty for nobody. `complete` is |
| 463 | false when more than 5,000 events fell in the span, or more than 50 |
| 464 | repositories were named. |
| 465 | |
| 466 | **`activity`** on the chat service (`workspace`, `viewer`, `from`, |
| 467 | `until`) returns `messages`, `channels` (conversations with at least one) |
| 468 | and `authors` (`key`, `messages`; most first), over text messages and |
| 469 | thread replies not deleted in the conversations the viewer can read. |
| 470 | |
| 471 | **`workspace_signals`** on the work service takes `workspace`, |
| 472 | `repo_ids` (at most 100), `viewer`, `until` (a UTC day), `weeks` (1 to |
| 473 | 13), `days` (1 to 28) and `since` (a UTC day, at most 400 days before |
| 474 | `until`). For the repositories the viewer can read, it returns: |
| 475 | |
| 476 | - `weeks`: per repository and week of seven days ending with `until`, |
| 477 | `merged`, `agent_merged`, `agent_reworked`, `agent_drafted` and |
| 478 | `agent_draft_seconds`, `reviewed` and `review_seconds`, and `stalled`. |
| 479 | - `days`: per repository and day, `opened`, `merged`, `agent_merged`, |
| 480 | `reworked`, `reviews` and `sessions`. |
| 481 | - `waiting`: open pull requests with no first review, oldest first, at |
| 482 | most 50, each with its work item and the open work items it `blocks`. |
| 483 | - `pulls`: those opened or merged since `since`, at most 3,000 newest |
| 484 | first, each with its owner, work item and milestone; `pulls_capped` |
| 485 | when there were more. |
| 486 | - `authors`: per repository and owner, their merges over its history and |
| 487 | in the last 90 days. |
| 488 | - The `items` and `milestones` those name. |
| 489 | |
| 490 | Rows are per repository, so a caller asking in batches adds them up. |